| OLD | NEW |
| 1 // Copyright 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 2012 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 "cc/layers/layer_impl.h" | 5 #include "cc/layers/layer_impl.h" |
| 6 | 6 |
| 7 #include "base/debug/trace_event.h" | 7 #include "base/debug/trace_event.h" |
| 8 #include "base/debug/trace_event_argument.h" | |
| 9 #include "base/json/json_reader.h" | 8 #include "base/json/json_reader.h" |
| 10 #include "base/strings/stringprintf.h" | 9 #include "base/strings/stringprintf.h" |
| 11 #include "cc/animation/animation_registrar.h" | 10 #include "cc/animation/animation_registrar.h" |
| 12 #include "cc/animation/scrollbar_animation_controller.h" | 11 #include "cc/animation/scrollbar_animation_controller.h" |
| 13 #include "cc/base/math_util.h" | 12 #include "cc/base/math_util.h" |
| 14 #include "cc/debug/debug_colors.h" | 13 #include "cc/debug/debug_colors.h" |
| 15 #include "cc/debug/layer_tree_debug_state.h" | 14 #include "cc/debug/layer_tree_debug_state.h" |
| 16 #include "cc/debug/micro_benchmark_impl.h" | 15 #include "cc/debug/micro_benchmark_impl.h" |
| 17 #include "cc/debug/traced_value.h" | 16 #include "cc/debug/traced_value.h" |
| 18 #include "cc/input/layer_scroll_offset_delegate.h" | 17 #include "cc/input/layer_scroll_offset_delegate.h" |
| (...skipping 1365 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1384 } | 1383 } |
| 1385 | 1384 |
| 1386 void LayerImpl::RemoveDependentNeedsPushProperties() { | 1385 void LayerImpl::RemoveDependentNeedsPushProperties() { |
| 1387 num_dependents_need_push_properties_--; | 1386 num_dependents_need_push_properties_--; |
| 1388 DCHECK_GE(num_dependents_need_push_properties_, 0); | 1387 DCHECK_GE(num_dependents_need_push_properties_, 0); |
| 1389 | 1388 |
| 1390 if (!parent_should_know_need_push_properties() && parent_) | 1389 if (!parent_should_know_need_push_properties() && parent_) |
| 1391 parent_->RemoveDependentNeedsPushProperties(); | 1390 parent_->RemoveDependentNeedsPushProperties(); |
| 1392 } | 1391 } |
| 1393 | 1392 |
| 1394 void LayerImpl::AsValueInto(base::debug::TracedValue* state) const { | 1393 void LayerImpl::AsValueInto(base::DictionaryValue* state) const { |
| 1395 TracedValue::MakeDictIntoImplicitSnapshotWithCategory( | 1394 TracedValue::MakeDictIntoImplicitSnapshotWithCategory( |
| 1396 TRACE_DISABLED_BY_DEFAULT("cc.debug"), | 1395 TRACE_DISABLED_BY_DEFAULT("cc.debug"), |
| 1397 state, | 1396 state, |
| 1398 "cc::LayerImpl", | 1397 "cc::LayerImpl", |
| 1399 LayerTypeAsString(), | 1398 LayerTypeAsString(), |
| 1400 this); | 1399 this); |
| 1401 state->SetInteger("layer_id", id()); | 1400 state->SetInteger("layer_id", id()); |
| 1402 state->BeginDictionary("bounds"); | 1401 state->Set("bounds", MathUtil::AsValue(bounds_).release()); |
| 1403 MathUtil::AddToTracedValue(bounds_, state); | 1402 state->Set("position", MathUtil::AsValue(position_).release()); |
| 1404 state->EndDictionary(); | |
| 1405 | |
| 1406 state->BeginArray("position"); | |
| 1407 MathUtil::AddToTracedValue(position_, state); | |
| 1408 state->EndArray(); | |
| 1409 | |
| 1410 state->SetInteger("draws_content", DrawsContent()); | 1403 state->SetInteger("draws_content", DrawsContent()); |
| 1411 state->SetInteger("gpu_memory_usage", GPUMemoryUsageInBytes()); | 1404 state->SetInteger("gpu_memory_usage", GPUMemoryUsageInBytes()); |
| 1412 | 1405 state->Set("scroll_offset", MathUtil::AsValue(scroll_offset_).release()); |
| 1413 state->BeginArray("scroll_offset"); | 1406 state->Set("transform_origin", |
| 1414 MathUtil::AddToTracedValue(scroll_offset_, state); | 1407 MathUtil::AsValue(transform_origin_).release()); |
| 1415 state->EndArray(); | |
| 1416 | |
| 1417 state->BeginArray("transform_origin"); | |
| 1418 MathUtil::AddToTracedValue(transform_origin_, state); | |
| 1419 state->EndArray(); | |
| 1420 | 1408 |
| 1421 bool clipped; | 1409 bool clipped; |
| 1422 gfx::QuadF layer_quad = MathUtil::MapQuad( | 1410 gfx::QuadF layer_quad = MathUtil::MapQuad( |
| 1423 screen_space_transform(), | 1411 screen_space_transform(), |
| 1424 gfx::QuadF(gfx::Rect(content_bounds())), | 1412 gfx::QuadF(gfx::Rect(content_bounds())), |
| 1425 &clipped); | 1413 &clipped); |
| 1426 state->BeginArray("layer_quad"); | 1414 state->Set("layer_quad", MathUtil::AsValue(layer_quad).release()); |
| 1427 MathUtil::AddToTracedValue(layer_quad, state); | 1415 |
| 1428 state->EndArray(); | |
| 1429 if (!touch_event_handler_region_.IsEmpty()) { | 1416 if (!touch_event_handler_region_.IsEmpty()) { |
| 1430 state->BeginArray("touch_event_handler_region"); | 1417 state->Set("touch_event_handler_region", |
| 1431 touch_event_handler_region_.AsValueInto(state); | 1418 touch_event_handler_region_.AsValue().release()); |
| 1432 state->EndArray(); | |
| 1433 } | 1419 } |
| 1434 if (have_wheel_event_handlers_) { | 1420 if (have_wheel_event_handlers_) { |
| 1435 gfx::Rect wheel_rect(content_bounds()); | 1421 gfx::Rect wheel_rect(content_bounds()); |
| 1436 Region wheel_region(wheel_rect); | 1422 Region wheel_region(wheel_rect); |
| 1437 state->BeginArray("wheel_event_handler_region"); | 1423 state->Set("wheel_event_handler_region", |
| 1438 wheel_region.AsValueInto(state); | 1424 wheel_region.AsValue().release()); |
| 1439 state->EndArray(); | |
| 1440 } | 1425 } |
| 1441 if (have_scroll_event_handlers_) { | 1426 if (have_scroll_event_handlers_) { |
| 1442 gfx::Rect scroll_rect(content_bounds()); | 1427 gfx::Rect scroll_rect(content_bounds()); |
| 1443 Region scroll_region(scroll_rect); | 1428 Region scroll_region(scroll_rect); |
| 1444 state->BeginArray("scroll_event_handler_region"); | 1429 state->Set("scroll_event_handler_region", |
| 1445 scroll_region.AsValueInto(state); | 1430 scroll_region.AsValue().release()); |
| 1446 state->EndArray(); | |
| 1447 } | 1431 } |
| 1448 if (!non_fast_scrollable_region_.IsEmpty()) { | 1432 if (!non_fast_scrollable_region_.IsEmpty()) { |
| 1449 state->BeginArray("non_fast_scrollable_region"); | 1433 state->Set("non_fast_scrollable_region", |
| 1450 non_fast_scrollable_region_.AsValueInto(state); | 1434 non_fast_scrollable_region_.AsValue().release()); |
| 1451 state->EndArray(); | |
| 1452 } | 1435 } |
| 1453 | 1436 |
| 1454 state->BeginArray("children"); | 1437 scoped_ptr<base::ListValue> children_list(new base::ListValue()); |
| 1455 for (size_t i = 0; i < children_.size(); ++i) { | 1438 for (size_t i = 0; i < children_.size(); ++i) |
| 1456 state->BeginDictionary(); | 1439 children_list->Append(children_[i]->AsValue().release()); |
| 1457 children_[i]->AsValueInto(state); | 1440 state->Set("children", children_list.release()); |
| 1458 state->EndDictionary(); | 1441 if (mask_layer_) |
| 1459 } | 1442 state->Set("mask_layer", mask_layer_->AsValue().release()); |
| 1460 state->EndArray(); | 1443 if (replica_layer_) |
| 1461 if (mask_layer_) { | 1444 state->Set("replica_layer", replica_layer_->AsValue().release()); |
| 1462 state->BeginDictionary("mask_layer"); | |
| 1463 mask_layer_->AsValueInto(state); | |
| 1464 state->EndDictionary(); | |
| 1465 } | |
| 1466 if (replica_layer_) { | |
| 1467 state->BeginDictionary("replica_layer"); | |
| 1468 replica_layer_->AsValueInto(state); | |
| 1469 state->EndDictionary(); | |
| 1470 } | |
| 1471 | 1445 |
| 1472 if (scroll_parent_) | 1446 if (scroll_parent_) |
| 1473 state->SetInteger("scroll_parent", scroll_parent_->id()); | 1447 state->SetInteger("scroll_parent", scroll_parent_->id()); |
| 1474 | 1448 |
| 1475 if (clip_parent_) | 1449 if (clip_parent_) |
| 1476 state->SetInteger("clip_parent", clip_parent_->id()); | 1450 state->SetInteger("clip_parent", clip_parent_->id()); |
| 1477 | 1451 |
| 1478 state->SetBoolean("can_use_lcd_text", can_use_lcd_text()); | 1452 state->SetBoolean("can_use_lcd_text", can_use_lcd_text()); |
| 1479 state->SetBoolean("contents_opaque", contents_opaque()); | 1453 state->SetBoolean("contents_opaque", contents_opaque()); |
| 1480 | 1454 |
| 1481 state->SetBoolean( | 1455 state->SetBoolean( |
| 1482 "has_animation_bounds", | 1456 "has_animation_bounds", |
| 1483 layer_animation_controller()->HasAnimationThatInflatesBounds()); | 1457 layer_animation_controller()->HasAnimationThatInflatesBounds()); |
| 1484 | 1458 |
| 1485 gfx::BoxF box; | 1459 gfx::BoxF box; |
| 1486 if (LayerUtils::GetAnimationBounds(*this, &box)) { | 1460 if (LayerUtils::GetAnimationBounds(*this, &box)) |
| 1487 state->BeginArray("animation_bounds"); | 1461 state->Set("animation_bounds", MathUtil::AsValue(box).release()); |
| 1488 MathUtil::AddToTracedValue(box, state); | |
| 1489 state->EndArray(); | |
| 1490 } | |
| 1491 | 1462 |
| 1492 if (debug_info_.get()) { | 1463 if (debug_info_.get()) { |
| 1493 std::string str; | 1464 std::string str; |
| 1494 debug_info_->AppendAsTraceFormat(&str); | 1465 debug_info_->AppendAsTraceFormat(&str); |
| 1495 base::JSONReader json_reader; | 1466 base::JSONReader json_reader; |
| 1496 scoped_ptr<base::Value> debug_info_value(json_reader.ReadToValue(str)); | 1467 scoped_ptr<base::Value> debug_info_value(json_reader.ReadToValue(str)); |
| 1497 | 1468 |
| 1498 if (debug_info_value->IsType(base::Value::TYPE_DICTIONARY)) { | 1469 if (debug_info_value->IsType(base::Value::TYPE_DICTIONARY)) { |
| 1499 base::DictionaryValue* dictionary_value = NULL; | 1470 base::DictionaryValue* dictionary_value = NULL; |
| 1500 bool converted_to_dictionary = | 1471 bool converted_to_dictionary = |
| 1501 debug_info_value->GetAsDictionary(&dictionary_value); | 1472 debug_info_value->GetAsDictionary(&dictionary_value); |
| 1502 DCHECK(converted_to_dictionary); | 1473 DCHECK(converted_to_dictionary); |
| 1503 for (base::DictionaryValue::Iterator it(*dictionary_value); !it.IsAtEnd(); | 1474 state->MergeDictionary(dictionary_value); |
| 1504 it.Advance()) { | |
| 1505 state->SetValue(it.key().data(), it.value().DeepCopy()); | |
| 1506 } | |
| 1507 } else { | 1475 } else { |
| 1508 NOTREACHED(); | 1476 NOTREACHED(); |
| 1509 } | 1477 } |
| 1510 } | 1478 } |
| 1511 } | 1479 } |
| 1512 | 1480 |
| 1513 bool LayerImpl::IsDrawnRenderSurfaceLayerListMember() const { | 1481 bool LayerImpl::IsDrawnRenderSurfaceLayerListMember() const { |
| 1514 return draw_properties_.last_drawn_render_surface_layer_list_id == | 1482 return draw_properties_.last_drawn_render_surface_layer_list_id == |
| 1515 layer_tree_impl_->current_render_surface_list_id(); | 1483 layer_tree_impl_->current_render_surface_list_id(); |
| 1516 } | 1484 } |
| 1517 | 1485 |
| 1518 size_t LayerImpl::GPUMemoryUsageInBytes() const { return 0; } | 1486 size_t LayerImpl::GPUMemoryUsageInBytes() const { return 0; } |
| 1519 | 1487 |
| 1488 scoped_ptr<base::Value> LayerImpl::AsValue() const { |
| 1489 scoped_ptr<base::DictionaryValue> state(new base::DictionaryValue()); |
| 1490 AsValueInto(state.get()); |
| 1491 return state.PassAs<base::Value>(); |
| 1492 } |
| 1493 |
| 1520 void LayerImpl::RunMicroBenchmark(MicroBenchmarkImpl* benchmark) { | 1494 void LayerImpl::RunMicroBenchmark(MicroBenchmarkImpl* benchmark) { |
| 1521 benchmark->RunOnLayer(this); | 1495 benchmark->RunOnLayer(this); |
| 1522 } | 1496 } |
| 1523 | 1497 |
| 1524 void LayerImpl::NotifyAnimationFinished( | 1498 void LayerImpl::NotifyAnimationFinished( |
| 1525 base::TimeTicks monotonic_time, | 1499 base::TimeTicks monotonic_time, |
| 1526 Animation::TargetProperty target_property) { | 1500 Animation::TargetProperty target_property) { |
| 1527 if (target_property == Animation::ScrollOffset) | 1501 if (target_property == Animation::ScrollOffset) |
| 1528 layer_tree_impl_->InputScrollAnimationFinished(); | 1502 layer_tree_impl_->InputScrollAnimationFinished(); |
| 1529 } | 1503 } |
| 1530 | 1504 |
| 1531 } // namespace cc | 1505 } // namespace cc |
| OLD | NEW |