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