1#ifndef _TCUANDROIDWINDOW_HPP 2#define _TCUANDROIDWINDOW_HPP 3/*------------------------------------------------------------------------- 4 * drawElements Quality Program Tester Core 5 * ---------------------------------------- 6 * 7 * Copyright 2014 The Android Open Source Project 8 * 9 * Licensed under the Apache License, Version 2.0 (the "License"); 10 * you may not use this file except in compliance with the License. 11 * You may obtain a copy of the License at 12 * 13 * http://www.apache.org/licenses/LICENSE-2.0 14 * 15 * Unless required by applicable law or agreed to in writing, software 16 * distributed under the License is distributed on an "AS IS" BASIS, 17 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 18 * See the License for the specific language governing permissions and 19 * limitations under the License. 20 * 21 *//*! 22 * \file 23 * \brief Android window. 24 *//*--------------------------------------------------------------------*/ 25 26#include "tcuDefs.hpp" 27#include "tcuVector.hpp" 28#include "deSemaphore.hpp" 29#include "deMutex.hpp" 30 31#include <vector> 32 33#include <android/native_window.h> 34 35namespace tcu 36{ 37namespace Android 38{ 39 40// \note Window is thread-safe, WindowRegistry is not 41 42class Window 43{ 44public: 45 enum State 46 { 47 STATE_AVAILABLE = 0, 48 STATE_IN_USE, 49 STATE_PENDING_DESTROY, 50 STATE_READY_FOR_DESTROY, 51 STATE_ACQUIRED_FOR_DESTROY, 52 53 STATE_LAST 54 }; 55 56 Window (ANativeWindow* window); 57 ~Window (void); 58 59 bool tryAcquire (void); 60 void release (void); 61 62 void markForDestroy (void); 63 bool isPendingDestroy (void) const; 64 bool tryAcquireForDestroy(bool onlyMarked); 65 66 ANativeWindow* getNativeWindow (void) { return m_window; } 67 68 void setBuffersGeometry (int width, int height, int32_t format); 69 70 IVec2 getSize (void) const; 71 72private: 73 Window (const Window& other); 74 Window& operator= (const Window& other); 75 76 ANativeWindow* m_window; 77 mutable de::Mutex m_stateLock; 78 State m_state; 79}; 80 81class WindowRegistry 82{ 83public: 84 WindowRegistry (void); 85 ~WindowRegistry (void); 86 87 void addWindow (ANativeWindow* window); 88 void destroyWindow (ANativeWindow* window); 89 90 Window* tryAcquireWindow (void); 91 92 void garbageCollect (void); 93 94private: 95 std::vector<Window*> m_windows; 96}; 97 98} // Android 99} // tcu 100 101#endif // _TCUANDROIDWINDOW_HPP 102