OLD | NEW |
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 246 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
257 } | 257 } |
258 | 258 |
259 void CompositorEngine::HitTest( | 259 void CompositorEngine::HitTest( |
260 RendererState* renderer_state, | 260 RendererState* renderer_state, |
261 mojo::PointPtr point, | 261 mojo::PointPtr point, |
262 const mojo::gfx::composition::HitTester::HitTestCallback& callback) { | 262 const mojo::gfx::composition::HitTester::HitTestCallback& callback) { |
263 DCHECK(IsRendererStateRegisteredDebug(renderer_state)); | 263 DCHECK(IsRendererStateRegisteredDebug(renderer_state)); |
264 DCHECK(point); | 264 DCHECK(point); |
265 DVLOG(1) << "HitTest: renderer=" << renderer_state << ", point=" << point; | 265 DVLOG(1) << "HitTest: renderer=" << renderer_state << ", point=" << point; |
266 | 266 |
267 mojo::gfx::composition::HitTestResultPtr result; | 267 // TODO(jeffbrown): hit tests on scenes |
268 if (renderer_state->frame()) { | 268 auto result = mojo::gfx::composition::HitTestResult::New(); |
269 result = | |
270 renderer_state->frame()->HitTest(SkPoint::Make(point->x, point->y)); | |
271 } | |
272 if (!result) { | |
273 result = mojo::gfx::composition::HitTestResult::New(); | |
274 result->hits.resize(0u); | |
275 } | |
276 | |
277 callback.Run(result.Pass()); | 269 callback.Run(result.Pass()); |
278 } | 270 } |
279 | 271 |
280 SceneDef* CompositorEngine::ResolveSceneReference( | 272 base::WeakPtr<SceneDef> CompositorEngine::ResolveSceneReference( |
281 mojo::gfx::composition::SceneToken* scene_token) { | 273 const mojo::gfx::composition::SceneToken& scene_token) { |
282 SceneState* scene_state = FindScene(scene_token->value); | 274 SceneState* scene_state = FindScene(scene_token.value); |
283 return scene_state ? scene_state->scene_def() : nullptr; | 275 return scene_state ? scene_state->scene_def()->GetWeakPtr() |
| 276 : base::WeakPtr<SceneDef>(); |
284 } | 277 } |
285 | 278 |
286 void CompositorEngine::SendResourceUnavailable(SceneState* scene_state, | 279 void CompositorEngine::SendResourceUnavailable(SceneState* scene_state, |
287 uint32_t resource_id) { | 280 uint32_t resource_id) { |
288 DCHECK(IsSceneStateRegisteredDebug(scene_state)); | 281 DCHECK(IsSceneStateRegisteredDebug(scene_state)); |
289 DVLOG(2) << "SendResourceUnavailable: resource_id=" << resource_id; | 282 DVLOG(2) << "SendResourceUnavailable: resource_id=" << resource_id; |
290 | 283 |
291 // TODO: Detect ANRs | 284 // TODO: Detect ANRs |
292 if (scene_state->scene_listener()) { | 285 if (scene_state->scene_listener()) { |
293 scene_state->scene_listener()->OnResourceUnavailable( | 286 scene_state->scene_listener()->OnResourceUnavailable( |
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
354 | 347 |
355 void CompositorEngine::SnapshotRenderer( | 348 void CompositorEngine::SnapshotRenderer( |
356 RendererState* renderer_state, | 349 RendererState* renderer_state, |
357 const mojo::gfx::composition::FrameInfo& frame_info) { | 350 const mojo::gfx::composition::FrameInfo& frame_info) { |
358 DCHECK(IsRendererStateRegisteredDebug(renderer_state)); | 351 DCHECK(IsRendererStateRegisteredDebug(renderer_state)); |
359 DVLOG(2) << "SnapshotRenderer: renderer_state=" << renderer_state; | 352 DVLOG(2) << "SnapshotRenderer: renderer_state=" << renderer_state; |
360 | 353 |
361 if (VLOG_IS_ON(2)) { | 354 if (VLOG_IS_ON(2)) { |
362 std::ostringstream block_log; | 355 std::ostringstream block_log; |
363 SnapshotRendererInner(renderer_state, frame_info, &block_log); | 356 SnapshotRendererInner(renderer_state, frame_info, &block_log); |
364 if (!renderer_state->valid()) { | 357 if (!renderer_state->frame()) { |
365 DVLOG(2) << "Rendering completely blocked: " << block_log.str(); | 358 DVLOG(2) << "Rendering completely blocked: " << block_log.str(); |
366 } else if (!block_log.str().empty()) { | 359 } else if (!block_log.str().empty()) { |
367 DVLOG(2) << "Rendering partially blocked: " << block_log.str(); | 360 DVLOG(2) << "Rendering partially blocked: " << block_log.str(); |
368 } else { | 361 } else { |
369 DVLOG(2) << "Rendering unblocked"; | 362 DVLOG(2) << "Rendering unblocked"; |
370 } | 363 } |
371 } else { | 364 } else { |
372 SnapshotRendererInner(renderer_state, frame_info, nullptr); | 365 SnapshotRendererInner(renderer_state, frame_info, nullptr); |
373 } | 366 } |
374 } | 367 } |
375 | 368 |
376 void CompositorEngine::SnapshotRendererInner( | 369 void CompositorEngine::SnapshotRendererInner( |
377 RendererState* renderer_state, | 370 RendererState* renderer_state, |
378 const mojo::gfx::composition::FrameInfo& frame_info, | 371 const mojo::gfx::composition::FrameInfo& frame_info, |
379 std::ostream* block_log) { | 372 std::ostream* block_log) { |
380 if (!renderer_state->root_scene()) { | 373 if (!renderer_state->root_scene()) { |
381 if (block_log) | 374 if (block_log) |
382 *block_log << "No root scene" << std::endl; | 375 *block_log << "No root scene" << std::endl; |
383 renderer_state->SetSnapshot(nullptr); | 376 renderer_state->SetSnapshot(nullptr); |
384 return; | 377 return; |
385 } | 378 } |
386 | 379 |
387 SnapshotBuilder builder(block_log); | 380 SnapshotBuilder builder(block_log); |
388 renderer_state->SetSnapshot( | 381 renderer_state->SetSnapshot( |
389 builder.Build(renderer_state->root_scene()->scene_def(), | 382 builder.Build(renderer_state->root_scene()->scene_def(), |
390 renderer_state->root_scene_viewport(), frame_info)); | 383 renderer_state->root_scene_viewport(), frame_info)); |
391 | 384 |
392 if (renderer_state->valid()) | 385 if (renderer_state->frame()) |
393 renderer_state->output()->SubmitFrame(renderer_state->frame()); | 386 renderer_state->output()->SubmitFrame(renderer_state->frame()); |
394 } | 387 } |
395 | 388 |
396 void CompositorEngine::ScheduleFrameForRenderer( | 389 void CompositorEngine::ScheduleFrameForRenderer( |
397 RendererState* renderer_state, | 390 RendererState* renderer_state, |
398 Scheduler::SchedulingMode scheduling_mode) { | 391 Scheduler::SchedulingMode scheduling_mode) { |
399 DCHECK(IsRendererStateRegisteredDebug(renderer_state)); | 392 DCHECK(IsRendererStateRegisteredDebug(renderer_state)); |
400 renderer_state->output()->GetScheduler()->ScheduleFrame(scheduling_mode); | 393 renderer_state->output()->GetScheduler()->ScheduleFrame(scheduling_mode); |
401 } | 394 } |
402 | 395 |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
450 | 443 |
451 SceneDef::Disposition disposition = | 444 SceneDef::Disposition disposition = |
452 PresentScene(scene_state, presentation_time); | 445 PresentScene(scene_state, presentation_time); |
453 if (disposition == SceneDef::Disposition::kFailed) | 446 if (disposition == SceneDef::Disposition::kFailed) |
454 DestroyScene(scene_state); | 447 DestroyScene(scene_state); |
455 else if (disposition == SceneDef::Disposition::kSucceeded) | 448 else if (disposition == SceneDef::Disposition::kSucceeded) |
456 InvalidateScene(scene_state); | 449 InvalidateScene(scene_state); |
457 } | 450 } |
458 | 451 |
459 } // namespace compositor | 452 } // namespace compositor |
OLD | NEW |