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

Side by Side Diff: services/gfx/compositor/tests/scheduling_apptest.cc

Issue 1997513002: Mozart: Generalize frame scheduling. (Closed) Base URL: git@github.com:domokit/mojo.git@moz-jank2
Patch Set: Created 4 years, 7 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
« no previous file with comments | « services/gfx/compositor/tests/README.md ('k') | services/ui/launcher/launch_instance.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 "mojo/public/cpp/application/application_impl.h"
6 #include "mojo/public/cpp/application/application_test_base.h"
7 #include "mojo/public/cpp/application/connect.h"
8 #include "mojo/public/cpp/bindings/synchronous_interface_ptr.h"
9 #include "mojo/public/cpp/system/macros.h"
10 #include "mojo/services/gfx/composition/interfaces/compositor.mojom-sync.h"
11 #include "mojo/services/gfx/composition/interfaces/scheduling.mojom-sync.h"
12 #include "mojo/services/gpu/interfaces/context_provider.mojom.h"
13 #include "mojo/services/native_viewport/interfaces/native_viewport.mojom.h"
14
15 namespace test {
16
17 using SynchronousCompositorPtr =
18 mojo::SynchronousInterfacePtr<mojo::gfx::composition::Compositor>;
19
20 using SynchronousFrameSchedulerPtr =
21 mojo::SynchronousInterfacePtr<mojo::gfx::composition::FrameScheduler>;
22
23 class SchedulingTest : public mojo::test::ApplicationTestBase {
24 public:
25 SchedulingTest() {}
26
27 protected:
28 void SetUp() override {
29 mojo::test::ApplicationTestBase::SetUp();
30
31 mojo::ConnectToService(shell(), "mojo:native_viewport_service",
32 GetProxy(&viewport_));
33 auto size = mojo::Size::New();
34 size->width = 320;
35 size->height = 640;
36 auto configuration = mojo::SurfaceConfiguration::New();
37 viewport_->Create(size.Pass(), configuration.Pass(),
38 [](mojo::ViewportMetricsPtr metrics) {
39
40 });
41 viewport_->Show();
42
43 mojo::ContextProviderPtr context_provider;
44 viewport_->GetContextProvider(GetProxy(&context_provider));
45
46 mojo::ConnectToService(shell(), "mojo:compositor_service",
47 mojo::GetSynchronousProxy(&compositor_));
48 compositor_->CreateRenderer(context_provider.Pass(),
49 mojo::GetProxy(&renderer_), "SchedulingTest");
50 }
51
52 void TestScheduler(SynchronousFrameSchedulerPtr scheduler) {
53 //
54 mojo::gfx::composition::FrameInfoPtr frame_info1;
55 ASSERT_TRUE(scheduler->ScheduleFrame(&frame_info1));
mikejurka 2016/05/19 23:59:00 does scheduleframe block until the frame is fully
jeffbrown 2016/05/20 00:38:12 ScheduleFrame blocks until the next frame is due.
56 AssertValidFrameInfo(frame_info1.get());
57
58 mojo::gfx::composition::FrameInfoPtr frame_info2;
59 ASSERT_TRUE(scheduler->ScheduleFrame(&frame_info2));
60 AssertValidFrameInfo(frame_info2.get());
61
62 EXPECT_GT(frame_info2->frame_time, frame_info1->frame_time);
63 EXPECT_GT(frame_info2->presentation_time, frame_info1->presentation_time);
64 }
65
66 void AssertValidFrameInfo(mojo::gfx::composition::FrameInfo* frame_info) {
67 ASSERT_NE(nullptr, frame_info);
68 EXPECT_LT(frame_info->frame_time, MojoGetTimeTicksNow());
69 EXPECT_GT(frame_info->frame_interval, 0u);
70 EXPECT_GT(frame_info->frame_deadline, frame_info->frame_time);
71 EXPECT_GT(frame_info->presentation_time, frame_info->frame_deadline);
72 }
73
74 mojo::NativeViewportPtr viewport_;
75 SynchronousCompositorPtr compositor_;
76 mojo::gfx::composition::RendererPtr renderer_;
77
78 private:
79 MOJO_DISALLOW_COPY_AND_ASSIGN(SchedulingTest);
80 };
81
82 namespace {
83
84 TEST_F(SchedulingTest, RendererScheduler) {
85 SynchronousFrameSchedulerPtr scheduler;
86 renderer_->GetScheduler(mojo::GetSynchronousProxy(&scheduler));
87 TestScheduler(scheduler.Pass());
88 }
89
90 TEST_F(SchedulingTest, OrphanedSceneScheduler) {
91 mojo::gfx::composition::ScenePtr scene;
mikejurka 2016/05/19 23:59:00 why is this scene orphaned -- is it because it sho
jeffbrown 2016/05/20 00:38:12 Added a comment.
92 mojo::gfx::composition::SceneTokenPtr scene_token;
93 compositor_->CreateScene(mojo::GetProxy(&scene), "SchedulingTest",
94 &scene_token);
95
96 SynchronousFrameSchedulerPtr scheduler;
97 scene->GetScheduler(mojo::GetSynchronousProxy(&scheduler));
98 TestScheduler(scheduler.Pass());
99 }
100
101 TEST_F(SchedulingTest, RootSceneScheduler) {
102 mojo::gfx::composition::ScenePtr scene;
103 mojo::gfx::composition::SceneTokenPtr scene_token;
104 compositor_->CreateScene(mojo::GetProxy(&scene), "SchedulingTest",
105 &scene_token);
106
107 auto viewport = mojo::Rect::New();
108 viewport->width = 1;
109 viewport->height = 1;
110 renderer_->SetRootScene(scene_token.Pass(),
111 mojo::gfx::composition::kSceneVersionNone,
112 viewport.Pass());
113
114 SynchronousFrameSchedulerPtr scheduler;
115 scene->GetScheduler(mojo::GetSynchronousProxy(&scheduler));
116 TestScheduler(scheduler.Pass());
117 }
118
119 } // namespace
120 } // namespace mojo
OLDNEW
« no previous file with comments | « services/gfx/compositor/tests/README.md ('k') | services/ui/launcher/launch_instance.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698