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

Side by Side Diff: services/gfx/compositor/compositor_engine.cc

Issue 1997513002: Mozart: Generalize frame scheduling. (Closed) Base URL: git@github.com:domokit/mojo.git@moz-jank2
Patch Set: add comments 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/compositor_engine.h ('k') | services/gfx/compositor/frame_dispatcher.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "services/gfx/compositor/compositor_engine.h" 5 #include "services/gfx/compositor/compositor_engine.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <sstream> 8 #include <sstream>
9 #include <utility> 9 #include <utility>
10 10
(...skipping 197 matching lines...) Expand 10 before | Expand all | Expand 10 after
208 } else { 208 } else {
209 base::MessageLoop::current()->PostDelayedTask( 209 base::MessageLoop::current()->PostDelayedTask(
210 FROM_HERE, base::Bind(&CompositorEngine::OnPresentScene, 210 FROM_HERE, base::Bind(&CompositorEngine::OnPresentScene,
211 weak_factory_.GetWeakPtr(), 211 weak_factory_.GetWeakPtr(),
212 scene_state->GetWeakPtr(), presentation_time), 212 scene_state->GetWeakPtr(), presentation_time),
213 base::TimeDelta::FromMicroseconds(presentation_time - now)); 213 base::TimeDelta::FromMicroseconds(presentation_time - now));
214 } 214 }
215 } 215 }
216 216
217 void CompositorEngine::ScheduleFrame(SceneState* scene_state, 217 void CompositorEngine::ScheduleFrame(SceneState* scene_state,
218 const SceneFrameCallback& callback) { 218 const FrameCallback& callback) {
219 DCHECK(IsSceneStateRegisteredDebug(scene_state)); 219 DCHECK(IsSceneStateRegisteredDebug(scene_state));
220 DVLOG(1) << "ScheduleFrame: scene=" << scene_state;
220 221
221 scene_state->AddSceneFrameCallback(callback); 222 if (!scene_state->frame_dispatcher().AddCallback(callback))
223 return;
222 224
223 // TODO(jeffbrown): Be more selective and do this work only for scenes 225 // TODO(jeffbrown): Be more selective and do this work only for scenes
224 // which are strongly associated with the renderer so it doesn't receive 226 // which are strongly associated with the renderer so it doesn't receive
225 // conflicting timing signals coming from multiple renderers. 227 // conflicting timing signals coming from multiple renderers.
226 for (auto& renderer : renderers_) { 228 for (auto& renderer : renderers_) {
227 ScheduleFrameForRenderer(renderer, 229 ScheduleFrameForRenderer(renderer,
228 Scheduler::SchedulingMode::kUpdateAndSnapshot); 230 Scheduler::SchedulingMode::kUpdateAndSnapshot);
229 } 231 }
230 } 232 }
231 233
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
269 DCHECK(IsRendererStateRegisteredDebug(renderer_state)); 271 DCHECK(IsRendererStateRegisteredDebug(renderer_state));
270 DVLOG(1) << "ClearRootScene: renderer=" << renderer_state; 272 DVLOG(1) << "ClearRootScene: renderer=" << renderer_state;
271 273
272 // Update the root. 274 // Update the root.
273 if (renderer_state->ClearRootScene()) { 275 if (renderer_state->ClearRootScene()) {
274 ScheduleFrameForRenderer(renderer_state, 276 ScheduleFrameForRenderer(renderer_state,
275 Scheduler::SchedulingMode::kSnapshot); 277 Scheduler::SchedulingMode::kSnapshot);
276 } 278 }
277 } 279 }
278 280
281 void CompositorEngine::ScheduleFrame(RendererState* renderer_state,
282 const FrameCallback& callback) {
283 DCHECK(IsRendererStateRegisteredDebug(renderer_state));
284 DVLOG(1) << "ScheduleFrame: renderer=" << renderer_state;
285
286 if (!renderer_state->frame_dispatcher().AddCallback(callback))
287 return;
288
289 ScheduleFrameForRenderer(renderer_state,
290 Scheduler::SchedulingMode::kUpdateAndSnapshot);
291 }
292
279 void CompositorEngine::HitTest( 293 void CompositorEngine::HitTest(
280 RendererState* renderer_state, 294 RendererState* renderer_state,
281 mojo::PointFPtr point, 295 mojo::PointFPtr point,
282 const mojo::gfx::composition::HitTester::HitTestCallback& callback) { 296 const mojo::gfx::composition::HitTester::HitTestCallback& callback) {
283 DCHECK(IsRendererStateRegisteredDebug(renderer_state)); 297 DCHECK(IsRendererStateRegisteredDebug(renderer_state));
284 DCHECK(point); 298 DCHECK(point);
285 DVLOG(1) << "HitTest: renderer=" << renderer_state << ", point=" << point; 299 DVLOG(1) << "HitTest: renderer=" << renderer_state << ", point=" << point;
286 300
287 auto result = mojo::gfx::composition::HitTestResult::New(); 301 auto result = mojo::gfx::composition::HitTestResult::New();
288 302
(...skipping 185 matching lines...) Expand 10 before | Expand all | Expand 10 after
474 } 488 }
475 489
476 void CompositorEngine::OnOutputUpdateRequest( 490 void CompositorEngine::OnOutputUpdateRequest(
477 const base::WeakPtr<RendererState>& renderer_state_weak, 491 const base::WeakPtr<RendererState>& renderer_state_weak,
478 const mojo::gfx::composition::FrameInfo& frame_info) { 492 const mojo::gfx::composition::FrameInfo& frame_info) {
479 RendererState* renderer_state = renderer_state_weak.get(); 493 RendererState* renderer_state = renderer_state_weak.get();
480 if (!renderer_state) 494 if (!renderer_state)
481 return; 495 return;
482 DCHECK(IsRendererStateRegisteredDebug(renderer_state)); 496 DCHECK(IsRendererStateRegisteredDebug(renderer_state));
483 497
498 renderer_state->frame_dispatcher().DispatchCallbacks(frame_info);
499
484 // TODO(jeffbrown): Be more selective and do this work only for scenes 500 // TODO(jeffbrown): Be more selective and do this work only for scenes
485 // associated with the renderer. 501 // associated with the renderer.
486 for (auto& pair : scenes_by_token_) { 502 for (auto& pair : scenes_by_token_) {
487 pair.second->DispatchSceneFrameCallbacks(frame_info); 503 pair.second->frame_dispatcher().DispatchCallbacks(frame_info);
488 } 504 }
489 } 505 }
490 506
491 void CompositorEngine::OnOutputSnapshotRequest( 507 void CompositorEngine::OnOutputSnapshotRequest(
492 const base::WeakPtr<RendererState>& renderer_state_weak, 508 const base::WeakPtr<RendererState>& renderer_state_weak,
493 const mojo::gfx::composition::FrameInfo& frame_info) { 509 const mojo::gfx::composition::FrameInfo& frame_info) {
494 RendererState* renderer_state = renderer_state_weak.get(); 510 RendererState* renderer_state = renderer_state_weak.get();
495 if (!renderer_state) 511 if (!renderer_state)
496 return; 512 return;
497 DCHECK(IsRendererStateRegisteredDebug(renderer_state)); 513 DCHECK(IsRendererStateRegisteredDebug(renderer_state));
(...skipping 11 matching lines...) Expand all
509 525
510 SceneDef::Disposition disposition = 526 SceneDef::Disposition disposition =
511 PresentScene(scene_state, presentation_time); 527 PresentScene(scene_state, presentation_time);
512 if (disposition == SceneDef::Disposition::kFailed) 528 if (disposition == SceneDef::Disposition::kFailed)
513 DestroyScene(scene_state); 529 DestroyScene(scene_state);
514 else if (disposition == SceneDef::Disposition::kSucceeded) 530 else if (disposition == SceneDef::Disposition::kSucceeded)
515 InvalidateScene(scene_state); 531 InvalidateScene(scene_state);
516 } 532 }
517 533
518 } // namespace compositor 534 } // namespace compositor
OLDNEW
« no previous file with comments | « services/gfx/compositor/compositor_engine.h ('k') | services/gfx/compositor/frame_dispatcher.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698