165efc253a628175c7afa95c431b746ea20052794Andy Qiu/* 2cd727f537d5085eec7f1b8f9c1d33922d4de75d4Prodyut Hazarika// Copyright (c) 2014 Intel Corporation 3cd727f537d5085eec7f1b8f9c1d33922d4de75d4Prodyut Hazarika// 4cd727f537d5085eec7f1b8f9c1d33922d4de75d4Prodyut Hazarika// Licensed under the Apache License, Version 2.0 (the "License"); 5cd727f537d5085eec7f1b8f9c1d33922d4de75d4Prodyut Hazarika// you may not use this file except in compliance with the License. 6cd727f537d5085eec7f1b8f9c1d33922d4de75d4Prodyut Hazarika// You may obtain a copy of the License at 7cd727f537d5085eec7f1b8f9c1d33922d4de75d4Prodyut Hazarika// 8cd727f537d5085eec7f1b8f9c1d33922d4de75d4Prodyut Hazarika// http://www.apache.org/licenses/LICENSE-2.0 9cd727f537d5085eec7f1b8f9c1d33922d4de75d4Prodyut Hazarika// 10cd727f537d5085eec7f1b8f9c1d33922d4de75d4Prodyut Hazarika// Unless required by applicable law or agreed to in writing, software 11cd727f537d5085eec7f1b8f9c1d33922d4de75d4Prodyut Hazarika// distributed under the License is distributed on an "AS IS" BASIS, 12cd727f537d5085eec7f1b8f9c1d33922d4de75d4Prodyut Hazarika// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13cd727f537d5085eec7f1b8f9c1d33922d4de75d4Prodyut Hazarika// See the License for the specific language governing permissions and 14cd727f537d5085eec7f1b8f9c1d33922d4de75d4Prodyut Hazarika// limitations under the License. 15cd727f537d5085eec7f1b8f9c1d33922d4de75d4Prodyut Hazarika*/ 1665efc253a628175c7afa95c431b746ea20052794Andy Qiu#ifndef DISPLAY_ANALYZER_H 1765efc253a628175c7afa95c431b746ea20052794Andy Qiu#define DISPLAY_ANALYZER_H 1865efc253a628175c7afa95c431b746ea20052794Andy Qiu 19d4e9a8ac464ef6fde755c1a8c0902dc02a1270ecAndy Qiu#include <utils/threads.h> 20eb726af21649d79ed720bdf329e0849270995c45Andy Qiu#include <utils/Vector.h> 2165efc253a628175c7afa95c431b746ea20052794Andy Qiu 2265efc253a628175c7afa95c431b746ea20052794Andy Qiu 2365efc253a628175c7afa95c431b746ea20052794Andy Qiunamespace android { 2465efc253a628175c7afa95c431b746ea20052794Andy Qiunamespace intel { 2565efc253a628175c7afa95c431b746ea20052794Andy Qiu 2665efc253a628175c7afa95c431b746ea20052794Andy Qiu 2765efc253a628175c7afa95c431b746ea20052794Andy Qiuclass DisplayAnalyzer { 2865efc253a628175c7afa95c431b746ea20052794Andy Qiupublic: 2965efc253a628175c7afa95c431b746ea20052794Andy Qiu DisplayAnalyzer(); 3065efc253a628175c7afa95c431b746ea20052794Andy Qiu virtual ~DisplayAnalyzer(); 3165efc253a628175c7afa95c431b746ea20052794Andy Qiu 3265efc253a628175c7afa95c431b746ea20052794Andy Qiupublic: 3365efc253a628175c7afa95c431b746ea20052794Andy Qiu bool initialize(); 34e2ad4c047651d4442f6a0e002290016d45e9201afu jin void deinitialize(); 3565efc253a628175c7afa95c431b746ea20052794Andy Qiu void analyzeContents(size_t numDisplays, hwc_display_contents_1_t** displays); 36eb726af21649d79ed720bdf329e0849270995c45Andy Qiu void postHotplugEvent(bool connected); 3765efc253a628175c7afa95c431b746ea20052794Andy Qiu 3865efc253a628175c7afa95c431b746ea20052794Andy Qiuprivate: 39eb726af21649d79ed720bdf329e0849270995c45Andy Qiu enum DisplayEventType { 40eb726af21649d79ed720bdf329e0849270995c45Andy Qiu HOTPLUG_EVENT, 41eb726af21649d79ed720bdf329e0849270995c45Andy Qiu }; 42eb726af21649d79ed720bdf329e0849270995c45Andy Qiu 43eb726af21649d79ed720bdf329e0849270995c45Andy Qiu struct Event { 44eb726af21649d79ed720bdf329e0849270995c45Andy Qiu int type; 45eb726af21649d79ed720bdf329e0849270995c45Andy Qiu 46eb726af21649d79ed720bdf329e0849270995c45Andy Qiu union { 47b7e04bcc10f0b8aaa698b1ccae40e87664ebef18mahongpe bool bValue; 48177b44e0661a92d06f8f37c51e59af86423f7a95Andy Qiu int nValue; 49eb726af21649d79ed720bdf329e0849270995c45Andy Qiu }; 50eb726af21649d79ed720bdf329e0849270995c45Andy Qiu }; 51eb726af21649d79ed720bdf329e0849270995c45Andy Qiu inline void postEvent(Event& e); 52b7e04bcc10f0b8aaa698b1ccae40e87664ebef18mahongpe inline bool getEvent(Event& e); 53eb726af21649d79ed720bdf329e0849270995c45Andy Qiu void handlePendingEvents(); 54eb726af21649d79ed720bdf329e0849270995c45Andy Qiu void handleHotplugEvent(bool connected); 55177b44e0661a92d06f8f37c51e59af86423f7a95Andy Qiu inline void setCompositionType(hwc_display_contents_1_t *content, int type); 56177b44e0661a92d06f8f37c51e59af86423f7a95Andy Qiu inline void setCompositionType(int device, int type, bool reset); 57770346b3b6f55e10c54c8a47d4db8f8907035173Lin Xie 58177b44e0661a92d06f8f37c51e59af86423f7a95Andy Qiu 59b7e04bcc10f0b8aaa698b1ccae40e87664ebef18mahongpeprivate: 6065efc253a628175c7afa95c431b746ea20052794Andy Qiu bool mInitialized; 61eb726af21649d79ed720bdf329e0849270995c45Andy Qiu int mCachedNumDisplays; 62eb726af21649d79ed720bdf329e0849270995c45Andy Qiu hwc_display_contents_1_t** mCachedDisplays; 63eb726af21649d79ed720bdf329e0849270995c45Andy Qiu Vector<Event> mPendingEvents; 64eb726af21649d79ed720bdf329e0849270995c45Andy Qiu Mutex mEventMutex; 6565efc253a628175c7afa95c431b746ea20052794Andy Qiu}; 6665efc253a628175c7afa95c431b746ea20052794Andy Qiu 6765efc253a628175c7afa95c431b746ea20052794Andy Qiu} // namespace intel 6865efc253a628175c7afa95c431b746ea20052794Andy Qiu} // namespace android 6965efc253a628175c7afa95c431b746ea20052794Andy Qiu 7065efc253a628175c7afa95c431b746ea20052794Andy Qiu 7165efc253a628175c7afa95c431b746ea20052794Andy Qiu 7265efc253a628175c7afa95c431b746ea20052794Andy Qiu#endif /* DISPLAY_ANALYZER_H */ 73