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

Side by Side Diff: gpu/ipc/service/gpu_vsync_provider_unittest_win.cc

Issue 2596123002: GpuVSyncProvider with unit test (Closed)
Patch Set: Fixed build failure on posix. Created 4 years 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 (c) 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 "gpu/ipc/service/gpu_vsync_provider.h"
6
7 #include <memory>
8
9 #include "base/bind.h"
10 #include "base/synchronization/waitable_event.h"
11 #include "testing/gtest/include/gtest/gtest.h"
12 #include "ui/base/win/hidden_window.h"
13
14 #include <windows.h>
15
16 namespace gpu {
17
18 class GpuVSyncProviderTest : public testing::Test {
19 public:
20 GpuVSyncProviderTest()
21 : vsync_event_(base::WaitableEvent::ResetPolicy::AUTOMATIC,
22 base::WaitableEvent::InitialState::NOT_SIGNALED) {}
23 ~GpuVSyncProviderTest() override {}
24
25 void SetUp() override {}
26
27 void TearDown() override {}
28
29 void OnVSync(base::TimeTicks timestamp) {
30 // This is called on VSync worker thread.
31 if (InterlockedIncrement(&vsync_count_) == 3)
32 vsync_event_.Signal();
33 }
34
35 base::WaitableEvent vsync_event_;
36 volatile LONG vsync_count_ = 0;
brucedawson 2016/12/22 21:49:16 Volatile isn't needed here. What makes this safe t
stanisc 2017/01/04 22:33:04 Done.
37 };
38
39 TEST_F(GpuVSyncProviderTest, VSyncSignalTest) {
40 SurfaceHandle window = ui::GetHiddenWindow();
41
42 std::unique_ptr<GpuVSyncProvider> provider = GpuVSyncProvider::Create(
43 base::Bind(&GpuVSyncProviderTest::OnVSync, base::Unretained(this)),
44 window);
45
46 constexpr base::TimeDelta wait_timeout =
47 base::TimeDelta::FromMilliseconds(300);
48
49 // Verify that there are no VSync signals before provider is enabled
50 bool wait_result = vsync_event_.TimedWait(wait_timeout);
51 EXPECT_FALSE(wait_result);
52 EXPECT_EQ(0, vsync_count_);
53
54 provider->EnableVSync(true);
55
56 vsync_event_.Wait();
57
58 provider->EnableVSync(false);
59
60 // Verify that VSync callbacks stop coming after disabling.
61 // Please note that it might still be possible for one
62 // callback to be in flight on VSync worker thread, so |vsync_count_|
63 // could still be incremented once, but not enough times to trigger
64 // |vsync_event_|.
65 InterlockedExchange(&vsync_count_, 0);
66 wait_result = vsync_event_.TimedWait(wait_timeout);
67 EXPECT_FALSE(wait_result);
68 }
69
70 } // namespace gpu
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698