13c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#ifndef _TCUANDROIDWINDOW_HPP 23c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#define _TCUANDROIDWINDOW_HPP 33c827367444ee418f129b2c238299f49d3264554Jarkko Poyry/*------------------------------------------------------------------------- 43c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * drawElements Quality Program Tester Core 53c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * ---------------------------------------- 63c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * 73c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * Copyright 2014 The Android Open Source Project 83c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * 93c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * Licensed under the Apache License, Version 2.0 (the "License"); 103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * you may not use this file except in compliance with the License. 113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * You may obtain a copy of the License at 123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * 133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * http://www.apache.org/licenses/LICENSE-2.0 143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * 153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * Unless required by applicable law or agreed to in writing, software 163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * distributed under the License is distributed on an "AS IS" BASIS, 173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * See the License for the specific language governing permissions and 193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * limitations under the License. 203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * 213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *//*! 223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \file 233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \brief Android window. 243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *//*--------------------------------------------------------------------*/ 253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "tcuDefs.hpp" 273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "tcuVector.hpp" 283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "deSemaphore.hpp" 29217426c2d19d5247e094e363615d7a0b84daf3a7Pyry Haulos#include "deMutex.hpp" 30217426c2d19d5247e094e363615d7a0b84daf3a7Pyry Haulos 31217426c2d19d5247e094e363615d7a0b84daf3a7Pyry Haulos#include <vector> 323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include <android/native_window.h> 343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 353c827367444ee418f129b2c238299f49d3264554Jarkko Poyrynamespace tcu 363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 373c827367444ee418f129b2c238299f49d3264554Jarkko Poyrynamespace Android 383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 40217426c2d19d5247e094e363615d7a0b84daf3a7Pyry Haulos// \note Window is thread-safe, WindowRegistry is not 41217426c2d19d5247e094e363615d7a0b84daf3a7Pyry Haulos 423c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass Window 433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 443c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic: 45217426c2d19d5247e094e363615d7a0b84daf3a7Pyry Haulos enum State 46217426c2d19d5247e094e363615d7a0b84daf3a7Pyry Haulos { 47217426c2d19d5247e094e363615d7a0b84daf3a7Pyry Haulos STATE_AVAILABLE = 0, 48217426c2d19d5247e094e363615d7a0b84daf3a7Pyry Haulos STATE_IN_USE, 49217426c2d19d5247e094e363615d7a0b84daf3a7Pyry Haulos STATE_PENDING_DESTROY, 50217426c2d19d5247e094e363615d7a0b84daf3a7Pyry Haulos STATE_READY_FOR_DESTROY, 51217426c2d19d5247e094e363615d7a0b84daf3a7Pyry Haulos STATE_ACQUIRED_FOR_DESTROY, 52217426c2d19d5247e094e363615d7a0b84daf3a7Pyry Haulos 53217426c2d19d5247e094e363615d7a0b84daf3a7Pyry Haulos STATE_LAST 54217426c2d19d5247e094e363615d7a0b84daf3a7Pyry Haulos }; 55217426c2d19d5247e094e363615d7a0b84daf3a7Pyry Haulos 56217426c2d19d5247e094e363615d7a0b84daf3a7Pyry Haulos Window (ANativeWindow* window); 57217426c2d19d5247e094e363615d7a0b84daf3a7Pyry Haulos ~Window (void); 583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 59217426c2d19d5247e094e363615d7a0b84daf3a7Pyry Haulos bool tryAcquire (void); 60217426c2d19d5247e094e363615d7a0b84daf3a7Pyry Haulos void release (void); 613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 62217426c2d19d5247e094e363615d7a0b84daf3a7Pyry Haulos void markForDestroy (void); 63217426c2d19d5247e094e363615d7a0b84daf3a7Pyry Haulos bool isPendingDestroy (void) const; 64217426c2d19d5247e094e363615d7a0b84daf3a7Pyry Haulos bool tryAcquireForDestroy(bool onlyMarked); 653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 66217426c2d19d5247e094e363615d7a0b84daf3a7Pyry Haulos ANativeWindow* getNativeWindow (void) { return m_window; } 673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 68217426c2d19d5247e094e363615d7a0b84daf3a7Pyry Haulos void setBuffersGeometry (int width, int height, int32_t format); 69217426c2d19d5247e094e363615d7a0b84daf3a7Pyry Haulos 70217426c2d19d5247e094e363615d7a0b84daf3a7Pyry Haulos IVec2 getSize (void) const; 713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 723c827367444ee418f129b2c238299f49d3264554Jarkko Poyryprivate: 73217426c2d19d5247e094e363615d7a0b84daf3a7Pyry Haulos Window (const Window& other); 74217426c2d19d5247e094e363615d7a0b84daf3a7Pyry Haulos Window& operator= (const Window& other); 75217426c2d19d5247e094e363615d7a0b84daf3a7Pyry Haulos 76217426c2d19d5247e094e363615d7a0b84daf3a7Pyry Haulos ANativeWindow* m_window; 77217426c2d19d5247e094e363615d7a0b84daf3a7Pyry Haulos mutable de::Mutex m_stateLock; 78217426c2d19d5247e094e363615d7a0b84daf3a7Pyry Haulos State m_state; 79217426c2d19d5247e094e363615d7a0b84daf3a7Pyry Haulos}; 803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 81217426c2d19d5247e094e363615d7a0b84daf3a7Pyry Haulosclass WindowRegistry 82217426c2d19d5247e094e363615d7a0b84daf3a7Pyry Haulos{ 83217426c2d19d5247e094e363615d7a0b84daf3a7Pyry Haulospublic: 84217426c2d19d5247e094e363615d7a0b84daf3a7Pyry Haulos WindowRegistry (void); 85217426c2d19d5247e094e363615d7a0b84daf3a7Pyry Haulos ~WindowRegistry (void); 86217426c2d19d5247e094e363615d7a0b84daf3a7Pyry Haulos 87217426c2d19d5247e094e363615d7a0b84daf3a7Pyry Haulos void addWindow (ANativeWindow* window); 88217426c2d19d5247e094e363615d7a0b84daf3a7Pyry Haulos void destroyWindow (ANativeWindow* window); 89217426c2d19d5247e094e363615d7a0b84daf3a7Pyry Haulos 90217426c2d19d5247e094e363615d7a0b84daf3a7Pyry Haulos Window* tryAcquireWindow (void); 91217426c2d19d5247e094e363615d7a0b84daf3a7Pyry Haulos 92217426c2d19d5247e094e363615d7a0b84daf3a7Pyry Haulos void garbageCollect (void); 93217426c2d19d5247e094e363615d7a0b84daf3a7Pyry Haulos 94217426c2d19d5247e094e363615d7a0b84daf3a7Pyry Haulosprivate: 95217426c2d19d5247e094e363615d7a0b84daf3a7Pyry Haulos std::vector<Window*> m_windows; 963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} // Android 993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} // tcu 1003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#endif // _TCUANDROIDWINDOW_HPP 102