1161e2e84682b0b70467f96d572565149c292592eBrian Duddie/*
2161e2e84682b0b70467f96d572565149c292592eBrian Duddie * Copyright (C) 2017 The Android Open Source Project
3161e2e84682b0b70467f96d572565149c292592eBrian Duddie *
4161e2e84682b0b70467f96d572565149c292592eBrian Duddie * Licensed under the Apache License, Version 2.0 (the "License");
5161e2e84682b0b70467f96d572565149c292592eBrian Duddie * you may not use this file except in compliance with the License.
6161e2e84682b0b70467f96d572565149c292592eBrian Duddie * You may obtain a copy of the License at
7161e2e84682b0b70467f96d572565149c292592eBrian Duddie *
8161e2e84682b0b70467f96d572565149c292592eBrian Duddie *      http://www.apache.org/licenses/LICENSE-2.0
9161e2e84682b0b70467f96d572565149c292592eBrian Duddie *
10161e2e84682b0b70467f96d572565149c292592eBrian Duddie * Unless required by applicable law or agreed to in writing, software
11161e2e84682b0b70467f96d572565149c292592eBrian Duddie * distributed under the License is distributed on an "AS IS" BASIS,
12161e2e84682b0b70467f96d572565149c292592eBrian Duddie * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13161e2e84682b0b70467f96d572565149c292592eBrian Duddie * See the License for the specific language governing permissions and
14161e2e84682b0b70467f96d572565149c292592eBrian Duddie * limitations under the License.
15161e2e84682b0b70467f96d572565149c292592eBrian Duddie */
16161e2e84682b0b70467f96d572565149c292592eBrian Duddie
17161e2e84682b0b70467f96d572565149c292592eBrian Duddie#include "chre/core/event_ref_queue.h"
18161e2e84682b0b70467f96d572565149c292592eBrian Duddie
19161e2e84682b0b70467f96d572565149c292592eBrian Duddie#include "chre/platform/assert.h"
20161e2e84682b0b70467f96d572565149c292592eBrian Duddie
21161e2e84682b0b70467f96d572565149c292592eBrian Duddienamespace chre {
22161e2e84682b0b70467f96d572565149c292592eBrian Duddie
235d9b2d68940f7dac47bf2fbad6f6069ed3b2faaaBrian DuddieEventRefQueue::~EventRefQueue() {
245d9b2d68940f7dac47bf2fbad6f6069ed3b2faaaBrian Duddie  CHRE_ASSERT_LOG(empty(), "Potentially leaking events if queue not empty "
255d9b2d68940f7dac47bf2fbad6f6069ed3b2faaaBrian Duddie                  "when destroyed");
265d9b2d68940f7dac47bf2fbad6f6069ed3b2faaaBrian Duddie}
275d9b2d68940f7dac47bf2fbad6f6069ed3b2faaaBrian Duddie
28161e2e84682b0b70467f96d572565149c292592eBrian Duddiebool EventRefQueue::push(Event *event) {
29161e2e84682b0b70467f96d572565149c292592eBrian Duddie  CHRE_ASSERT(event != nullptr);
30161e2e84682b0b70467f96d572565149c292592eBrian Duddie
31161e2e84682b0b70467f96d572565149c292592eBrian Duddie  bool pushed = mQueue.push(event);
32161e2e84682b0b70467f96d572565149c292592eBrian Duddie  if (pushed) {
33161e2e84682b0b70467f96d572565149c292592eBrian Duddie    event->incrementRefCount();
34161e2e84682b0b70467f96d572565149c292592eBrian Duddie  }
35161e2e84682b0b70467f96d572565149c292592eBrian Duddie
36161e2e84682b0b70467f96d572565149c292592eBrian Duddie  return pushed;
37161e2e84682b0b70467f96d572565149c292592eBrian Duddie}
38161e2e84682b0b70467f96d572565149c292592eBrian Duddie
39161e2e84682b0b70467f96d572565149c292592eBrian DuddieEvent *EventRefQueue::pop() {
40161e2e84682b0b70467f96d572565149c292592eBrian Duddie  CHRE_ASSERT(!mQueue.empty());
41161e2e84682b0b70467f96d572565149c292592eBrian Duddie
42161e2e84682b0b70467f96d572565149c292592eBrian Duddie  Event *event = mQueue.front();
43161e2e84682b0b70467f96d572565149c292592eBrian Duddie  mQueue.pop();
44161e2e84682b0b70467f96d572565149c292592eBrian Duddie  event->decrementRefCount();
45161e2e84682b0b70467f96d572565149c292592eBrian Duddie
46161e2e84682b0b70467f96d572565149c292592eBrian Duddie  return event;
47161e2e84682b0b70467f96d572565149c292592eBrian Duddie}
48161e2e84682b0b70467f96d572565149c292592eBrian Duddie
49161e2e84682b0b70467f96d572565149c292592eBrian Duddie}  // namespace chre
50