Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3)

Side by Side Diff: content/common/gpu/media/video_accelerator_unittest_helpers.h

Issue 1882373004: Migrate content/common/gpu/media code to media/gpu (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix several more bot-identified build issues Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 //
5 // This file contains helper classes for video accelerator unittests.
6
7 #ifndef CONTENT_COMMON_GPU_MEDIA_VIDEO_ACCELERATOR_UNITTEST_HELPERS_H_
8 #define CONTENT_COMMON_GPU_MEDIA_VIDEO_ACCELERATOR_UNITTEST_HELPERS_H_
9
10 #include <queue>
11
12 #include "base/synchronization/condition_variable.h"
13 #include "base/synchronization/lock.h"
14
15 namespace content {
16
17 // Helper class allowing one thread to wait on a notification from another.
18 // If notifications come in faster than they are Wait()'d for, they are
19 // accumulated (so exactly as many Wait() calls will unblock as Notify() calls
20 // were made, regardless of order).
21 template <typename StateEnum>
22 class ClientStateNotification {
23 public:
24 ClientStateNotification();
25 ~ClientStateNotification();
26
27 // Used to notify a single waiter of a ClientState.
28 void Notify(StateEnum state);
29 // Used by waiters to wait for the next ClientState Notification.
30 StateEnum Wait();
31
32 private:
33 base::Lock lock_;
34 base::ConditionVariable cv_;
35 std::queue<StateEnum> pending_states_for_notification_;
36 };
37
38 template <typename StateEnum>
39 ClientStateNotification<StateEnum>::ClientStateNotification() : cv_(&lock_) {}
40
41 template <typename StateEnum>
42 ClientStateNotification<StateEnum>::~ClientStateNotification() {}
43
44 template <typename StateEnum>
45 void ClientStateNotification<StateEnum>::Notify(StateEnum state) {
46 base::AutoLock auto_lock(lock_);
47 pending_states_for_notification_.push(state);
48 cv_.Signal();
49 }
50
51 template <typename StateEnum>
52 StateEnum ClientStateNotification<StateEnum>::Wait() {
53 base::AutoLock auto_lock(lock_);
54 while (pending_states_for_notification_.empty())
55 cv_.Wait();
56 StateEnum ret = pending_states_for_notification_.front();
57 pending_states_for_notification_.pop();
58 return ret;
59 }
60
61 } // namespace content
62
63 #endif // CONTENT_COMMON_GPU_MEDIA_VIDEO_ACCELERATOR_UNITTEST_HELPERS_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698