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

Side by Side Diff: ui/gfx/shared_event_unittest.cc

Issue 2383753002: gpu: Add GpuFence framework.
Patch Set: rebase Created 4 years, 1 month 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 2016 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 #include "ui/gfx/shared_event.h"
6
7 #include "base/threading/platform_thread.h"
8 #include "base/time/time.h"
9 #include "build/build_config.h"
10 #include "testing/gtest/include/gtest/gtest.h"
11
12 namespace gfx {
13
14 TEST(SharedEventTest, Basics) {
15 SharedEvent event1;
16 SharedEvent event2(SharedEvent::DuplicateHandle(event1.GetHandle()));
17
18 EXPECT_FALSE(event1.IsSignaled());
19 EXPECT_FALSE(event2.IsSignaled());
20
21 event1.Signal();
22 EXPECT_TRUE(event1.IsSignaled());
23 EXPECT_TRUE(event2.IsSignaled());
24
25 event1.Reset();
26 EXPECT_FALSE(event1.IsSignaled());
27 EXPECT_FALSE(event2.IsSignaled());
28 EXPECT_FALSE(event1.Wait(base::TimeDelta::FromMilliseconds(10)));
29 EXPECT_FALSE(event2.Wait(base::TimeDelta::FromMilliseconds(10)));
30
31 event2.Signal();
32 EXPECT_TRUE(event1.Wait(base::TimeDelta::FromMilliseconds(10)));
33 EXPECT_TRUE(event2.Wait(base::TimeDelta::FromMilliseconds(10)));
34 }
35
36 class SharedEventSignaler : public base::PlatformThread::Delegate {
37 public:
38 SharedEventSignaler(base::TimeDelta delay, const SharedEventHandle& handle)
39 : delay_(delay), event_(handle) {}
40
41 void ThreadMain() override {
42 base::PlatformThread::Sleep(delay_);
43 event_.Signal();
44 }
45
46 private:
47 const base::TimeDelta delay_;
48 SharedEvent event_;
49 };
50
51 TEST(SharedEventTest, WaitAndReset) {
52 SharedEvent event;
53
54 SharedEventSignaler signaler(base::TimeDelta::FromMilliseconds(10),
55 SharedEvent::DuplicateHandle(event.GetHandle()));
56 base::PlatformThreadHandle thread;
57 base::PlatformThread::Create(0, &signaler, &thread);
58
59 base::TimeTicks now = base::TimeTicks::Now();
60 base::TimeTicks end = now + base::TimeDelta::FromSeconds(5);
61 while (now < end) {
62 if (event.Wait(end - now))
63 break;
64 now = base::TimeTicks::Now();
65 }
66
67 EXPECT_TRUE(event.IsSignaled());
68 event.Reset();
69 EXPECT_FALSE(event.IsSignaled());
70 event.Signal();
71 EXPECT_TRUE(event.Wait(base::TimeDelta::FromMilliseconds(10)));
72
73 base::PlatformThread::Join(thread);
74 }
75
76 class SharedEventWaiter : public base::PlatformThread::Delegate {
77 public:
78 SharedEventWaiter(base::TimeDelta max_time, const SharedEventHandle& handle)
79 : until_(base::TimeTicks::Now() + max_time), event_(handle) {}
80
81 void ThreadMain() override {
82 base::TimeTicks now = base::TimeTicks::Now();
83 while (now < until_) {
84 if (event_.Wait(until_ - now))
85 break;
86 now = base::TimeTicks::Now();
87 }
88 EXPECT_TRUE(event_.IsSignaled());
89 }
90
91 private:
92 const base::TimeTicks until_;
93 SharedEvent event_;
94 };
95
96 // Tests that a SharedEvent can be safely be deleted before having been
97 // signaled.
98 TEST(SharedEventTest, SignalAndDelete) {
99 std::unique_ptr<SharedEvent> event(new SharedEvent);
100
101 SharedEventWaiter waiter(base::TimeDelta::FromSeconds(5),
102 SharedEvent::DuplicateHandle(event->GetHandle()));
103 base::PlatformThreadHandle thread;
104 base::PlatformThread::Create(0, &waiter, &thread);
105
106 EXPECT_FALSE(event->IsSignaled());
107 event->Signal();
108 event.reset();
109
110 base::PlatformThread::Join(thread);
111 }
112
113 } // namespace gfx
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698