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