103e407270c7ad76632f982c886d0776bed9e9b4cMathias Agopian/*
203e407270c7ad76632f982c886d0776bed9e9b4cMathias Agopian * Copyright (C) 2012 The Android Open Source Project
303e407270c7ad76632f982c886d0776bed9e9b4cMathias Agopian *
403e407270c7ad76632f982c886d0776bed9e9b4cMathias Agopian * Licensed under the Apache License, Version 2.0 (the "License");
503e407270c7ad76632f982c886d0776bed9e9b4cMathias Agopian * you may not use this file except in compliance with the License.
603e407270c7ad76632f982c886d0776bed9e9b4cMathias Agopian * You may obtain a copy of the License at
703e407270c7ad76632f982c886d0776bed9e9b4cMathias Agopian *
803e407270c7ad76632f982c886d0776bed9e9b4cMathias Agopian *      http://www.apache.org/licenses/LICENSE-2.0
903e407270c7ad76632f982c886d0776bed9e9b4cMathias Agopian *
1003e407270c7ad76632f982c886d0776bed9e9b4cMathias Agopian * Unless required by applicable law or agreed to in writing, software
1103e407270c7ad76632f982c886d0776bed9e9b4cMathias Agopian * distributed under the License is distributed on an "AS IS" BASIS,
1203e407270c7ad76632f982c886d0776bed9e9b4cMathias Agopian * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1303e407270c7ad76632f982c886d0776bed9e9b4cMathias Agopian * See the License for the specific language governing permissions and
1403e407270c7ad76632f982c886d0776bed9e9b4cMathias Agopian * limitations under the License.
1503e407270c7ad76632f982c886d0776bed9e9b4cMathias Agopian */
1603e407270c7ad76632f982c886d0776bed9e9b4cMathias Agopian
1703e407270c7ad76632f982c886d0776bed9e9b4cMathias Agopian#include <stdint.h>
1803e407270c7ad76632f982c886d0776bed9e9b4cMathias Agopian#include <sys/types.h>
1903e407270c7ad76632f982c886d0776bed9e9b4cMathias Agopian
2003e407270c7ad76632f982c886d0776bed9e9b4cMathias Agopian#include <cutils/log.h>
2103e407270c7ad76632f982c886d0776bed9e9b4cMathias Agopian#include <utils/Errors.h>
2203e407270c7ad76632f982c886d0776bed9e9b4cMathias Agopian
23ef472ec40a0fbb0ef96b79bef846f20b73da4971Ruchi Kandoi#include <binder/IServiceManager.h>
24ef472ec40a0fbb0ef96b79bef846f20b73da4971Ruchi Kandoi#include <powermanager/IPowerManager.h>
25ef472ec40a0fbb0ef96b79bef846f20b73da4971Ruchi Kandoi#include <powermanager/PowerManager.h>
26ef472ec40a0fbb0ef96b79bef846f20b73da4971Ruchi Kandoi
2703e407270c7ad76632f982c886d0776bed9e9b4cMathias Agopian#include "PowerHAL.h"
2803e407270c7ad76632f982c886d0776bed9e9b4cMathias Agopian
2903e407270c7ad76632f982c886d0776bed9e9b4cMathias Agopiannamespace android {
3003e407270c7ad76632f982c886d0776bed9e9b4cMathias Agopian// ---------------------------------------------------------------------------
3103e407270c7ad76632f982c886d0776bed9e9b4cMathias Agopian
3203e407270c7ad76632f982c886d0776bed9e9b4cMathias Agopianstatus_t PowerHAL::vsyncHint(bool enabled) {
33ef472ec40a0fbb0ef96b79bef846f20b73da4971Ruchi Kandoi    Mutex::Autolock _l(mlock);
34ef472ec40a0fbb0ef96b79bef846f20b73da4971Ruchi Kandoi    if (mPowerManager == NULL) {
35ef472ec40a0fbb0ef96b79bef846f20b73da4971Ruchi Kandoi        const String16 serviceName("power");
36ef472ec40a0fbb0ef96b79bef846f20b73da4971Ruchi Kandoi        sp<IBinder> bs = defaultServiceManager()->checkService(serviceName);
37ef472ec40a0fbb0ef96b79bef846f20b73da4971Ruchi Kandoi        if (bs == NULL) {
38ef472ec40a0fbb0ef96b79bef846f20b73da4971Ruchi Kandoi            return NAME_NOT_FOUND;
394098f03d5c9fb8522279ca04da70bec6793b2caaRuchi Kandoi        }
40ef472ec40a0fbb0ef96b79bef846f20b73da4971Ruchi Kandoi        mPowerManager = interface_cast<IPowerManager>(bs);
41ef472ec40a0fbb0ef96b79bef846f20b73da4971Ruchi Kandoi    }
42ef472ec40a0fbb0ef96b79bef846f20b73da4971Ruchi Kandoi    status_t status = mPowerManager->powerHint(POWER_HINT_VSYNC, enabled ? 1 : 0);
43ef472ec40a0fbb0ef96b79bef846f20b73da4971Ruchi Kandoi    if(status == DEAD_OBJECT) {
44ef472ec40a0fbb0ef96b79bef846f20b73da4971Ruchi Kandoi        mPowerManager = NULL;
4503e407270c7ad76632f982c886d0776bed9e9b4cMathias Agopian    }
46ef472ec40a0fbb0ef96b79bef846f20b73da4971Ruchi Kandoi    return status;
4703e407270c7ad76632f982c886d0776bed9e9b4cMathias Agopian}
4803e407270c7ad76632f982c886d0776bed9e9b4cMathias Agopian
4903e407270c7ad76632f982c886d0776bed9e9b4cMathias Agopian// ---------------------------------------------------------------------------
5003e407270c7ad76632f982c886d0776bed9e9b4cMathias Agopian}; // namespace android
5103e407270c7ad76632f982c886d0776bed9e9b4cMathias Agopian
52