1d47f4a9d650ba807a9654d661374cd849f6bd251Daniel Nicoara/*
2d47f4a9d650ba807a9654d661374cd849f6bd251Daniel Nicoara * Copyright (C) 2017 The Android Open Source Project
3d47f4a9d650ba807a9654d661374cd849f6bd251Daniel Nicoara *
4d47f4a9d650ba807a9654d661374cd849f6bd251Daniel Nicoara * Licensed under the Apache License, Version 2.0 (the "License");
5d47f4a9d650ba807a9654d661374cd849f6bd251Daniel Nicoara * you may not use this file except in compliance with the License.
6d47f4a9d650ba807a9654d661374cd849f6bd251Daniel Nicoara * You may obtain a copy of the License at
7d47f4a9d650ba807a9654d661374cd849f6bd251Daniel Nicoara *
8d47f4a9d650ba807a9654d661374cd849f6bd251Daniel Nicoara *      http://www.apache.org/licenses/LICENSE-2.0
9d47f4a9d650ba807a9654d661374cd849f6bd251Daniel Nicoara *
10d47f4a9d650ba807a9654d661374cd849f6bd251Daniel Nicoara * Unless required by applicable law or agreed to in writing, software
11d47f4a9d650ba807a9654d661374cd849f6bd251Daniel Nicoara * distributed under the License is distributed on an "AS IS" BASIS,
12d47f4a9d650ba807a9654d661374cd849f6bd251Daniel Nicoara * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13d47f4a9d650ba807a9654d661374cd849f6bd251Daniel Nicoara * See the License for the specific language governing permissions and
14d47f4a9d650ba807a9654d661374cd849f6bd251Daniel Nicoara * limitations under the License.
15d47f4a9d650ba807a9654d661374cd849f6bd251Daniel Nicoara */
16d47f4a9d650ba807a9654d661374cd849f6bd251Daniel Nicoara
1796a098a80d9904f57d0ed65f9de8d210175a11c0Chia-I Wu#include <composer-vts/2.1/GraphicsComposerCallback.h>
18d47f4a9d650ba807a9654d661374cd849f6bd251Daniel Nicoara
19d47f4a9d650ba807a9654d661374cd849f6bd251Daniel Nicoaranamespace android {
20d47f4a9d650ba807a9654d661374cd849f6bd251Daniel Nicoaranamespace hardware {
21d47f4a9d650ba807a9654d661374cd849f6bd251Daniel Nicoaranamespace graphics {
22d47f4a9d650ba807a9654d661374cd849f6bd251Daniel Nicoaranamespace composer {
23d47f4a9d650ba807a9654d661374cd849f6bd251Daniel Nicoaranamespace V2_1 {
2496a098a80d9904f57d0ed65f9de8d210175a11c0Chia-I Wunamespace vts {
25d47f4a9d650ba807a9654d661374cd849f6bd251Daniel Nicoara
26d47f4a9d650ba807a9654d661374cd849f6bd251Daniel Nicoaravoid GraphicsComposerCallback::setVsyncAllowed(bool allowed) {
278b20c5c8817534def44224c9ab6dbe166e7383d6Chia-I Wu    std::lock_guard<std::mutex> lock(mMutex);
288b20c5c8817534def44224c9ab6dbe166e7383d6Chia-I Wu    mVsyncAllowed = allowed;
29d47f4a9d650ba807a9654d661374cd849f6bd251Daniel Nicoara}
30d47f4a9d650ba807a9654d661374cd849f6bd251Daniel Nicoara
31d47f4a9d650ba807a9654d661374cd849f6bd251Daniel Nicoarastd::vector<Display> GraphicsComposerCallback::getDisplays() const {
328b20c5c8817534def44224c9ab6dbe166e7383d6Chia-I Wu    std::lock_guard<std::mutex> lock(mMutex);
338b20c5c8817534def44224c9ab6dbe166e7383d6Chia-I Wu    return std::vector<Display>(mDisplays.begin(), mDisplays.end());
34d47f4a9d650ba807a9654d661374cd849f6bd251Daniel Nicoara}
35d47f4a9d650ba807a9654d661374cd849f6bd251Daniel Nicoara
36d47f4a9d650ba807a9654d661374cd849f6bd251Daniel Nicoaraint GraphicsComposerCallback::getInvalidHotplugCount() const {
378b20c5c8817534def44224c9ab6dbe166e7383d6Chia-I Wu    std::lock_guard<std::mutex> lock(mMutex);
388b20c5c8817534def44224c9ab6dbe166e7383d6Chia-I Wu    return mInvalidHotplugCount;
39d47f4a9d650ba807a9654d661374cd849f6bd251Daniel Nicoara}
40d47f4a9d650ba807a9654d661374cd849f6bd251Daniel Nicoara
41d47f4a9d650ba807a9654d661374cd849f6bd251Daniel Nicoaraint GraphicsComposerCallback::getInvalidRefreshCount() const {
428b20c5c8817534def44224c9ab6dbe166e7383d6Chia-I Wu    std::lock_guard<std::mutex> lock(mMutex);
438b20c5c8817534def44224c9ab6dbe166e7383d6Chia-I Wu    return mInvalidRefreshCount;
44d47f4a9d650ba807a9654d661374cd849f6bd251Daniel Nicoara}
45d47f4a9d650ba807a9654d661374cd849f6bd251Daniel Nicoara
46d47f4a9d650ba807a9654d661374cd849f6bd251Daniel Nicoaraint GraphicsComposerCallback::getInvalidVsyncCount() const {
478b20c5c8817534def44224c9ab6dbe166e7383d6Chia-I Wu    std::lock_guard<std::mutex> lock(mMutex);
488b20c5c8817534def44224c9ab6dbe166e7383d6Chia-I Wu    return mInvalidVsyncCount;
49d47f4a9d650ba807a9654d661374cd849f6bd251Daniel Nicoara}
50d47f4a9d650ba807a9654d661374cd849f6bd251Daniel Nicoara
518b20c5c8817534def44224c9ab6dbe166e7383d6Chia-I WuReturn<void> GraphicsComposerCallback::onHotplug(Display display, Connection connection) {
528b20c5c8817534def44224c9ab6dbe166e7383d6Chia-I Wu    std::lock_guard<std::mutex> lock(mMutex);
538b20c5c8817534def44224c9ab6dbe166e7383d6Chia-I Wu
548b20c5c8817534def44224c9ab6dbe166e7383d6Chia-I Wu    if (connection == Connection::CONNECTED) {
558b20c5c8817534def44224c9ab6dbe166e7383d6Chia-I Wu        if (!mDisplays.insert(display).second) {
568b20c5c8817534def44224c9ab6dbe166e7383d6Chia-I Wu            mInvalidHotplugCount++;
578b20c5c8817534def44224c9ab6dbe166e7383d6Chia-I Wu        }
588b20c5c8817534def44224c9ab6dbe166e7383d6Chia-I Wu    } else if (connection == Connection::DISCONNECTED) {
598b20c5c8817534def44224c9ab6dbe166e7383d6Chia-I Wu        if (!mDisplays.erase(display)) {
608b20c5c8817534def44224c9ab6dbe166e7383d6Chia-I Wu            mInvalidHotplugCount++;
618b20c5c8817534def44224c9ab6dbe166e7383d6Chia-I Wu        }
62d47f4a9d650ba807a9654d661374cd849f6bd251Daniel Nicoara    }
63d47f4a9d650ba807a9654d661374cd849f6bd251Daniel Nicoara
648b20c5c8817534def44224c9ab6dbe166e7383d6Chia-I Wu    return Void();
65d47f4a9d650ba807a9654d661374cd849f6bd251Daniel Nicoara}
66d47f4a9d650ba807a9654d661374cd849f6bd251Daniel Nicoara
67d47f4a9d650ba807a9654d661374cd849f6bd251Daniel NicoaraReturn<void> GraphicsComposerCallback::onRefresh(Display display) {
688b20c5c8817534def44224c9ab6dbe166e7383d6Chia-I Wu    std::lock_guard<std::mutex> lock(mMutex);
69d47f4a9d650ba807a9654d661374cd849f6bd251Daniel Nicoara
708b20c5c8817534def44224c9ab6dbe166e7383d6Chia-I Wu    if (mDisplays.count(display) == 0) {
718b20c5c8817534def44224c9ab6dbe166e7383d6Chia-I Wu        mInvalidRefreshCount++;
728b20c5c8817534def44224c9ab6dbe166e7383d6Chia-I Wu    }
73d47f4a9d650ba807a9654d661374cd849f6bd251Daniel Nicoara
748b20c5c8817534def44224c9ab6dbe166e7383d6Chia-I Wu    return Void();
75d47f4a9d650ba807a9654d661374cd849f6bd251Daniel Nicoara}
76d47f4a9d650ba807a9654d661374cd849f6bd251Daniel Nicoara
77d47f4a9d650ba807a9654d661374cd849f6bd251Daniel NicoaraReturn<void> GraphicsComposerCallback::onVsync(Display display, int64_t) {
788b20c5c8817534def44224c9ab6dbe166e7383d6Chia-I Wu    std::lock_guard<std::mutex> lock(mMutex);
79d47f4a9d650ba807a9654d661374cd849f6bd251Daniel Nicoara
808b20c5c8817534def44224c9ab6dbe166e7383d6Chia-I Wu    if (!mVsyncAllowed || mDisplays.count(display) == 0) {
818b20c5c8817534def44224c9ab6dbe166e7383d6Chia-I Wu        mInvalidVsyncCount++;
828b20c5c8817534def44224c9ab6dbe166e7383d6Chia-I Wu    }
83d47f4a9d650ba807a9654d661374cd849f6bd251Daniel Nicoara
848b20c5c8817534def44224c9ab6dbe166e7383d6Chia-I Wu    return Void();
85d47f4a9d650ba807a9654d661374cd849f6bd251Daniel Nicoara}
86d47f4a9d650ba807a9654d661374cd849f6bd251Daniel Nicoara
8796a098a80d9904f57d0ed65f9de8d210175a11c0Chia-I Wu}  // namespace vts
88d47f4a9d650ba807a9654d661374cd849f6bd251Daniel Nicoara}  // namespace V2_1
89d47f4a9d650ba807a9654d661374cd849f6bd251Daniel Nicoara}  // namespace composer
90d47f4a9d650ba807a9654d661374cd849f6bd251Daniel Nicoara}  // namespace graphics
91d47f4a9d650ba807a9654d661374cd849f6bd251Daniel Nicoara}  // namespace hardware
92d47f4a9d650ba807a9654d661374cd849f6bd251Daniel Nicoara}  // namespace android
93