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#include "Event.h" 18c1ba5c4649554e744844b07cfe402b42fbe12ff3Sahil Dhanju 19c1ba5c4649554e744844b07cfe402b42fbe12ff3Sahil Dhanjuusing namespace android; 20c1ba5c4649554e744844b07cfe402b42fbe12ff3Sahil Dhanju 21c1ba5c4649554e744844b07cfe402b42fbe12ff3Sahil DhanjuEvent::Event(Increment::IncrementCase type) : mIncrementType(type) {} 22c1ba5c4649554e744844b07cfe402b42fbe12ff3Sahil Dhanju 23c1ba5c4649554e744844b07cfe402b42fbe12ff3Sahil Dhanjuvoid Event::readyToExecute() { 24c1ba5c4649554e744844b07cfe402b42fbe12ff3Sahil Dhanju changeState(Event::EventState::Waiting); 25c1ba5c4649554e744844b07cfe402b42fbe12ff3Sahil Dhanju waitUntil(Event::EventState::Signaled); 26c1ba5c4649554e744844b07cfe402b42fbe12ff3Sahil Dhanju changeState(Event::EventState::Running); 27c1ba5c4649554e744844b07cfe402b42fbe12ff3Sahil Dhanju} 28c1ba5c4649554e744844b07cfe402b42fbe12ff3Sahil Dhanju 29c1ba5c4649554e744844b07cfe402b42fbe12ff3Sahil Dhanjuvoid Event::complete() { 30c1ba5c4649554e744844b07cfe402b42fbe12ff3Sahil Dhanju waitUntil(Event::EventState::Waiting); 31c1ba5c4649554e744844b07cfe402b42fbe12ff3Sahil Dhanju changeState(Event::EventState::Signaled); 32c1ba5c4649554e744844b07cfe402b42fbe12ff3Sahil Dhanju waitUntil(Event::EventState::Running); 33c1ba5c4649554e744844b07cfe402b42fbe12ff3Sahil Dhanju} 34c1ba5c4649554e744844b07cfe402b42fbe12ff3Sahil Dhanju 35c1ba5c4649554e744844b07cfe402b42fbe12ff3Sahil Dhanjuvoid Event::waitUntil(Event::EventState state) { 36c1ba5c4649554e744844b07cfe402b42fbe12ff3Sahil Dhanju std::unique_lock<std::mutex> lock(mLock); 37c1ba5c4649554e744844b07cfe402b42fbe12ff3Sahil Dhanju mCond.wait(lock, [this, state] { return (mState == state); }); 38c1ba5c4649554e744844b07cfe402b42fbe12ff3Sahil Dhanju} 39c1ba5c4649554e744844b07cfe402b42fbe12ff3Sahil Dhanju 40c1ba5c4649554e744844b07cfe402b42fbe12ff3Sahil Dhanjuvoid Event::changeState(Event::EventState state) { 41c1ba5c4649554e744844b07cfe402b42fbe12ff3Sahil Dhanju std::unique_lock<std::mutex> lock(mLock); 42c1ba5c4649554e744844b07cfe402b42fbe12ff3Sahil Dhanju mState = state; 43c1ba5c4649554e744844b07cfe402b42fbe12ff3Sahil Dhanju lock.unlock(); 44c1ba5c4649554e744844b07cfe402b42fbe12ff3Sahil Dhanju 45c1ba5c4649554e744844b07cfe402b42fbe12ff3Sahil Dhanju mCond.notify_one(); 46c1ba5c4649554e744844b07cfe402b42fbe12ff3Sahil Dhanju} 47c1ba5c4649554e744844b07cfe402b42fbe12ff3Sahil Dhanju 48c1ba5c4649554e744844b07cfe402b42fbe12ff3Sahil DhanjuIncrement::IncrementCase Event::getIncrementType() { 49c1ba5c4649554e744844b07cfe402b42fbe12ff3Sahil Dhanju return mIncrementType; 50c1ba5c4649554e744844b07cfe402b42fbe12ff3Sahil Dhanju} 51