1c1ba5c4649554e744844b07cfe402b42fbe12ff3Sahil Dhanju/* 2c1ba5c4649554e744844b07cfe402b42fbe12ff3Sahil Dhanju * Copyright 2016 The Android Open Source Project 3c1ba5c4649554e744844b07cfe402b42fbe12ff3Sahil Dhanju * 4c1ba5c4649554e744844b07cfe402b42fbe12ff3Sahil Dhanju * Licensed under the Apache License, Version 2.0 (the "License"); 5c1ba5c4649554e744844b07cfe402b42fbe12ff3Sahil Dhanju * you may not use this file except in compliance with the License. 6c1ba5c4649554e744844b07cfe402b42fbe12ff3Sahil Dhanju * You may obtain a copy of the License at 7c1ba5c4649554e744844b07cfe402b42fbe12ff3Sahil Dhanju * 8c1ba5c4649554e744844b07cfe402b42fbe12ff3Sahil Dhanju * http://www.apache.org/licenses/LICENSE-2.0 9c1ba5c4649554e744844b07cfe402b42fbe12ff3Sahil Dhanju * 10c1ba5c4649554e744844b07cfe402b42fbe12ff3Sahil Dhanju * Unless required by applicable law or agreed to in writing, software 11c1ba5c4649554e744844b07cfe402b42fbe12ff3Sahil Dhanju * distributed under the License is distributed on an "AS IS" BASIS, 12c1ba5c4649554e744844b07cfe402b42fbe12ff3Sahil Dhanju * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13c1ba5c4649554e744844b07cfe402b42fbe12ff3Sahil Dhanju * See the License for the specific language governing permissions and 14c1ba5c4649554e744844b07cfe402b42fbe12ff3Sahil Dhanju * limitations under the License. 15c1ba5c4649554e744844b07cfe402b42fbe12ff3Sahil Dhanju */ 16c1ba5c4649554e744844b07cfe402b42fbe12ff3Sahil Dhanju 17c1ba5c4649554e744844b07cfe402b42fbe12ff3Sahil Dhanju#ifndef ANDROID_SURFACEREPLAYER_EVENT_H 18c1ba5c4649554e744844b07cfe402b42fbe12ff3Sahil Dhanju#define ANDROID_SURFACEREPLAYER_EVENT_H 19c1ba5c4649554e744844b07cfe402b42fbe12ff3Sahil Dhanju 20c1ba5c4649554e744844b07cfe402b42fbe12ff3Sahil Dhanju#include <frameworks/native/cmds/surfacereplayer/proto/src/trace.pb.h> 21c1ba5c4649554e744844b07cfe402b42fbe12ff3Sahil Dhanju 22c1ba5c4649554e744844b07cfe402b42fbe12ff3Sahil Dhanju#include <condition_variable> 23c1ba5c4649554e744844b07cfe402b42fbe12ff3Sahil Dhanju#include <mutex> 24c1ba5c4649554e744844b07cfe402b42fbe12ff3Sahil Dhanju 25c1ba5c4649554e744844b07cfe402b42fbe12ff3Sahil Dhanjunamespace android { 26c1ba5c4649554e744844b07cfe402b42fbe12ff3Sahil Dhanju 27c1ba5c4649554e744844b07cfe402b42fbe12ff3Sahil Dhanjuclass Event { 28c1ba5c4649554e744844b07cfe402b42fbe12ff3Sahil Dhanju public: 29c1ba5c4649554e744844b07cfe402b42fbe12ff3Sahil Dhanju Event(Increment::IncrementCase); 30c1ba5c4649554e744844b07cfe402b42fbe12ff3Sahil Dhanju 31c1ba5c4649554e744844b07cfe402b42fbe12ff3Sahil Dhanju enum class EventState { 32c1ba5c4649554e744844b07cfe402b42fbe12ff3Sahil Dhanju SettingUp, // Completing as much time-independent work as possible 33c1ba5c4649554e744844b07cfe402b42fbe12ff3Sahil Dhanju Waiting, // Waiting for signal from main thread to finish execution 34c1ba5c4649554e744844b07cfe402b42fbe12ff3Sahil Dhanju Signaled, // Signaled by main thread, about to immediately switch to Running 35c1ba5c4649554e744844b07cfe402b42fbe12ff3Sahil Dhanju Running // Finishing execution of rest of work 36c1ba5c4649554e744844b07cfe402b42fbe12ff3Sahil Dhanju }; 37c1ba5c4649554e744844b07cfe402b42fbe12ff3Sahil Dhanju 38c1ba5c4649554e744844b07cfe402b42fbe12ff3Sahil Dhanju void readyToExecute(); 39c1ba5c4649554e744844b07cfe402b42fbe12ff3Sahil Dhanju void complete(); 40c1ba5c4649554e744844b07cfe402b42fbe12ff3Sahil Dhanju 41c1ba5c4649554e744844b07cfe402b42fbe12ff3Sahil Dhanju Increment::IncrementCase getIncrementType(); 42c1ba5c4649554e744844b07cfe402b42fbe12ff3Sahil Dhanju 43c1ba5c4649554e744844b07cfe402b42fbe12ff3Sahil Dhanju private: 44c1ba5c4649554e744844b07cfe402b42fbe12ff3Sahil Dhanju void waitUntil(EventState state); 45c1ba5c4649554e744844b07cfe402b42fbe12ff3Sahil Dhanju void changeState(EventState state); 46c1ba5c4649554e744844b07cfe402b42fbe12ff3Sahil Dhanju 47c1ba5c4649554e744844b07cfe402b42fbe12ff3Sahil Dhanju std::mutex mLock; 48c1ba5c4649554e744844b07cfe402b42fbe12ff3Sahil Dhanju std::condition_variable mCond; 49c1ba5c4649554e744844b07cfe402b42fbe12ff3Sahil Dhanju 50c1ba5c4649554e744844b07cfe402b42fbe12ff3Sahil Dhanju EventState mState = EventState::SettingUp; 51c1ba5c4649554e744844b07cfe402b42fbe12ff3Sahil Dhanju 52c1ba5c4649554e744844b07cfe402b42fbe12ff3Sahil Dhanju Increment::IncrementCase mIncrementType; 53c1ba5c4649554e744844b07cfe402b42fbe12ff3Sahil Dhanju}; 54c1ba5c4649554e744844b07cfe402b42fbe12ff3Sahil Dhanju} 55c1ba5c4649554e744844b07cfe402b42fbe12ff3Sahil Dhanju#endif 56