| /* |
| // Copyright (c) 2014 Intel Corporation |
| // |
| // Licensed under the Apache License, Version 2.0 (the "License"); |
| // you may not use this file except in compliance with the License. |
| // You may obtain a copy of the License at |
| // |
| // http://www.apache.org/licenses/LICENSE-2.0 |
| // |
| // Unless required by applicable law or agreed to in writing, software |
| // distributed under the License is distributed on an "AS IS" BASIS, |
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| // See the License for the specific language governing permissions and |
| // limitations under the License. |
| */ |
| #include <HwcTrace.h> |
| #include <Drm.h> |
| #include <Hwcomposer.h> |
| #include <common/VsyncControl.h> |
| |
| namespace android { |
| namespace intel { |
| |
| VsyncControl::VsyncControl() |
| : IVsyncControl(), |
| mInitialized(false) |
| { |
| } |
| |
| VsyncControl::~VsyncControl() |
| { |
| WARN_IF_NOT_DEINIT(); |
| } |
| |
| bool VsyncControl::initialize() |
| { |
| mInitialized = true; |
| return true; |
| } |
| |
| void VsyncControl::deinitialize() |
| { |
| mInitialized = false; |
| } |
| |
| bool VsyncControl::control(int disp, bool enabled) |
| { |
| ATRACE("disp = %d, enabled = %d", disp, enabled); |
| |
| struct drm_psb_vsync_set_arg arg; |
| memset(&arg, 0, sizeof(struct drm_psb_vsync_set_arg)); |
| |
| // pipe equals to disp |
| arg.vsync.pipe = disp; |
| |
| if (enabled) { |
| arg.vsync_operation_mask = VSYNC_ENABLE; |
| } else { |
| arg.vsync_operation_mask = VSYNC_DISABLE; |
| } |
| Drm *drm = Hwcomposer::getInstance().getDrm(); |
| return drm->writeReadIoctl(DRM_PSB_VSYNC_SET, &arg, sizeof(arg)); |
| } |
| |
| bool VsyncControl::wait(int disp, int64_t& timestamp) |
| { |
| ATRACE("disp = %d", disp); |
| |
| struct drm_psb_vsync_set_arg arg; |
| memset(&arg, 0, sizeof(struct drm_psb_vsync_set_arg)); |
| |
| arg.vsync_operation_mask = VSYNC_WAIT; |
| |
| // pipe equals to disp |
| arg.vsync.pipe = disp; |
| |
| Drm *drm = Hwcomposer::getInstance().getDrm(); |
| bool ret = drm->writeReadIoctl(DRM_PSB_VSYNC_SET, &arg, sizeof(arg)); |
| timestamp = (int64_t)arg.vsync.timestamp; |
| return ret; |
| } |
| |
| } // namespace intel |
| } // namespace android |