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