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/heads_up_display_layer_impl.h" | 5 #include "cc/layers/heads_up_display_layer_impl.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <vector> | 8 #include <vector> |
9 | 9 |
10 #include "base/strings/stringprintf.h" | 10 #include "base/strings/stringprintf.h" |
11 #include "cc/debug/debug_colors.h" | 11 #include "cc/debug/debug_colors.h" |
12 #include "cc/debug/debug_rect_history.h" | |
13 #include "cc/debug/frame_rate_counter.h" | 12 #include "cc/debug/frame_rate_counter.h" |
14 #include "cc/debug/paint_time_counter.h" | 13 #include "cc/debug/paint_time_counter.h" |
15 #include "cc/debug/traced_value.h" | 14 #include "cc/debug/traced_value.h" |
16 #include "cc/layers/quad_sink.h" | 15 #include "cc/layers/quad_sink.h" |
17 #include "cc/output/renderer.h" | 16 #include "cc/output/renderer.h" |
18 #include "cc/quads/texture_draw_quad.h" | 17 #include "cc/quads/texture_draw_quad.h" |
19 #include "cc/resources/memory_history.h" | 18 #include "cc/resources/memory_history.h" |
20 #include "cc/trees/layer_tree_impl.h" | 19 #include "cc/trees/layer_tree_impl.h" |
21 #include "skia/ext/platform_canvas.h" | 20 #include "skia/ext/platform_canvas.h" |
22 #include "third_party/khronos/GLES2/gl2.h" | 21 #include "third_party/khronos/GLES2/gl2.h" |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
64 current_upper_bound += (target_upper_bound - current_upper_bound) * 0.5; | 63 current_upper_bound += (target_upper_bound - current_upper_bound) * 0.5; |
65 return current_upper_bound; | 64 return current_upper_bound; |
66 } | 65 } |
67 | 66 |
68 HeadsUpDisplayLayerImpl::HeadsUpDisplayLayerImpl(LayerTreeImpl* tree_impl, | 67 HeadsUpDisplayLayerImpl::HeadsUpDisplayLayerImpl(LayerTreeImpl* tree_impl, |
69 int id) | 68 int id) |
70 : LayerImpl(tree_impl, id), | 69 : LayerImpl(tree_impl, id), |
71 typeface_(skia::AdoptRef( | 70 typeface_(skia::AdoptRef( |
72 SkTypeface::CreateFromName("monospace", SkTypeface::kBold))), | 71 SkTypeface::CreateFromName("monospace", SkTypeface::kBold))), |
73 fps_graph_(60.0, 80.0), | 72 fps_graph_(60.0, 80.0), |
74 paint_time_graph_(16.0, 48.0) {} | 73 paint_time_graph_(16.0, 48.0), |
74 fade_step_(0) {} | |
75 | 75 |
76 HeadsUpDisplayLayerImpl::~HeadsUpDisplayLayerImpl() {} | 76 HeadsUpDisplayLayerImpl::~HeadsUpDisplayLayerImpl() {} |
77 | 77 |
78 scoped_ptr<LayerImpl> HeadsUpDisplayLayerImpl::CreateLayerImpl( | 78 scoped_ptr<LayerImpl> HeadsUpDisplayLayerImpl::CreateLayerImpl( |
79 LayerTreeImpl* tree_impl) { | 79 LayerTreeImpl* tree_impl) { |
80 return HeadsUpDisplayLayerImpl::Create(tree_impl, id()).PassAs<LayerImpl>(); | 80 return HeadsUpDisplayLayerImpl::Create(tree_impl, id()).PassAs<LayerImpl>(); |
81 } | 81 } |
82 | 82 |
83 bool HeadsUpDisplayLayerImpl::WillDraw(DrawMode draw_mode, | 83 bool HeadsUpDisplayLayerImpl::WillDraw(DrawMode draw_mode, |
84 ResourceProvider* resource_provider) { | 84 ResourceProvider* resource_provider) { |
(...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
218 memory_entry_ = **memory_history->End(); | 218 memory_entry_ = **memory_history->End(); |
219 else | 219 else |
220 memory_entry_ = MemoryHistory::Entry(); | 220 memory_entry_ = MemoryHistory::Entry(); |
221 } | 221 } |
222 } | 222 } |
223 | 223 |
224 fps_graph_.UpdateUpperBound(); | 224 fps_graph_.UpdateUpperBound(); |
225 paint_time_graph_.UpdateUpperBound(); | 225 paint_time_graph_.UpdateUpperBound(); |
226 } | 226 } |
227 | 227 |
228 void HeadsUpDisplayLayerImpl::DrawHudContents(SkCanvas* canvas) const { | 228 void HeadsUpDisplayLayerImpl::DrawHudContents(SkCanvas* canvas) { |
229 const LayerTreeDebugState& debug_state = layer_tree_impl()->debug_state(); | 229 const LayerTreeDebugState& debug_state = layer_tree_impl()->debug_state(); |
230 | 230 |
231 if (debug_state.ShowHudRects()) | 231 if (debug_state.ShowHudRects()) { |
232 DrawDebugRects(canvas, layer_tree_impl()->debug_rect_history()); | 232 DrawDebugRects(canvas, layer_tree_impl()->debug_rect_history()); |
233 if (IsAnimatingHUDContents()) { | |
234 layer_tree_impl()->SetNeedsRedraw(); | |
235 } | |
236 } | |
233 | 237 |
234 SkRect area = SkRect::MakeEmpty(); | 238 SkRect area = SkRect::MakeEmpty(); |
235 if (debug_state.continuous_painting) { | 239 if (debug_state.continuous_painting) { |
236 area = DrawPaintTimeDisplay( | 240 area = DrawPaintTimeDisplay( |
237 canvas, layer_tree_impl()->paint_time_counter(), 0, 0); | 241 canvas, layer_tree_impl()->paint_time_counter(), 0, 0); |
238 } else if (debug_state.show_fps_counter) { | 242 } else if (debug_state.show_fps_counter) { |
239 // Don't show the FPS display when continuous painting is enabled, because | 243 // Don't show the FPS display when continuous painting is enabled, because |
240 // it would show misleading numbers. | 244 // it would show misleading numbers. |
241 area = | 245 area = |
242 DrawFPSDisplay(canvas, layer_tree_impl()->frame_rate_counter(), 0, 0); | 246 DrawFPSDisplay(canvas, layer_tree_impl()->frame_rate_counter(), 0, 0); |
(...skipping 336 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
579 1, | 583 1, |
580 p * graph_bounds.height()), | 584 p * graph_bounds.height()), |
581 paint); | 585 paint); |
582 } | 586 } |
583 | 587 |
584 DrawGraphLines(canvas, &paint, graph_bounds, paint_time_graph_); | 588 DrawGraphLines(canvas, &paint, graph_bounds, paint_time_graph_); |
585 | 589 |
586 return area; | 590 return area; |
587 } | 591 } |
588 | 592 |
593 void HeadsUpDisplayLayerImpl::DrawDebugRect( | |
594 SkCanvas* canvas, | |
595 SkPaint& paint, | |
596 const DebugRect& rect, | |
597 SkColor stroke_color, | |
598 SkColor fill_color, | |
599 float stroke_width, | |
600 const std::string& label_text) const { | |
601 gfx::RectF debug_layer_rect = gfx::ScaleRect( | |
602 rect.rect, 1.0 / contents_scale_x(), 1.0 / contents_scale_y()); | |
603 SkRect sk_rect = RectFToSkRect(debug_layer_rect); | |
604 paint.setColor(fill_color); | |
605 paint.setStyle(SkPaint::kFill_Style); | |
606 canvas->drawRect(sk_rect, paint); | |
607 | |
608 paint.setColor(stroke_color); | |
609 paint.setStyle(SkPaint::kStroke_Style); | |
610 paint.setStrokeWidth(SkFloatToScalar(stroke_width)); | |
611 canvas->drawRect(sk_rect, paint); | |
612 | |
613 if (label_text.length()) { | |
614 const int kFontHeight = 12; | |
615 const int kPadding = 3; | |
616 | |
617 canvas->save(); | |
618 canvas->clipRect(sk_rect); | |
619 canvas->translate(sk_rect.x(), sk_rect.y()); | |
620 | |
621 SkPaint label_paint = CreatePaint(); | |
622 label_paint.setTextSize(kFontHeight); | |
623 label_paint.setTypeface(typeface_.get()); | |
624 label_paint.setColor(stroke_color); | |
625 | |
626 const SkScalar label_text_width = | |
627 label_paint.measureText(label_text.c_str(), label_text.length()); | |
628 canvas->drawRect(SkRect::MakeWH(label_text_width + 2 * kPadding, | |
629 kFontHeight + 2 * kPadding), | |
630 label_paint); | |
631 | |
632 label_paint.setAntiAlias(true); | |
633 label_paint.setColor(SkColorSetARGB(255, 50, 50, 50)); | |
634 canvas->drawText(label_text.c_str(), | |
635 label_text.length(), | |
636 kPadding, | |
637 kFontHeight * 0.8f + kPadding, | |
638 label_paint); | |
639 | |
640 canvas->restore(); | |
641 } | |
642 } | |
643 | |
589 void HeadsUpDisplayLayerImpl::DrawDebugRects( | 644 void HeadsUpDisplayLayerImpl::DrawDebugRects( |
590 SkCanvas* canvas, | 645 SkCanvas* canvas, |
591 DebugRectHistory* debug_rect_history) const { | 646 DebugRectHistory* debug_rect_history) { |
647 SkPaint paint = CreatePaint(); | |
648 | |
592 const std::vector<DebugRect>& debug_rects = debug_rect_history->debug_rects(); | 649 const std::vector<DebugRect>& debug_rects = debug_rect_history->debug_rects(); |
593 SkPaint paint = CreatePaint(); | 650 |
danakj
2014/03/11 17:28:32
nit: drop extra whitespace
malch
2014/03/12 07:22:53
Done.
| |
651 std::vector<DebugRect> new_paint_rects; | |
594 | 652 |
595 for (size_t i = 0; i < debug_rects.size(); ++i) { | 653 for (size_t i = 0; i < debug_rects.size(); ++i) { |
596 SkColor stroke_color = 0; | 654 SkColor stroke_color = 0; |
597 SkColor fill_color = 0; | 655 SkColor fill_color = 0; |
598 float stroke_width = 0.f; | 656 float stroke_width = 0.f; |
599 std::string label_text; | 657 std::string label_text; |
600 | 658 |
601 switch (debug_rects[i].type) { | 659 switch (debug_rects[i].type) { |
602 case PAINT_RECT_TYPE: | 660 case PAINT_RECT_TYPE: |
603 stroke_color = DebugColors::PaintRectBorderColor(); | 661 new_paint_rects.push_back(debug_rects[i]); |
604 fill_color = DebugColors::PaintRectFillColor(); | 662 fade_step_ = DebugColors::kFadeSteps; |
605 stroke_width = DebugColors::PaintRectBorderWidth(); | 663 continue; |
606 break; | |
607 case PROPERTY_CHANGED_RECT_TYPE: | 664 case PROPERTY_CHANGED_RECT_TYPE: |
608 stroke_color = DebugColors::PropertyChangedRectBorderColor(); | 665 stroke_color = DebugColors::PropertyChangedRectBorderColor(); |
609 fill_color = DebugColors::PropertyChangedRectFillColor(); | 666 fill_color = DebugColors::PropertyChangedRectFillColor(); |
610 stroke_width = DebugColors::PropertyChangedRectBorderWidth(); | 667 stroke_width = DebugColors::PropertyChangedRectBorderWidth(); |
611 break; | 668 break; |
612 case SURFACE_DAMAGE_RECT_TYPE: | 669 case SURFACE_DAMAGE_RECT_TYPE: |
613 stroke_color = DebugColors::SurfaceDamageRectBorderColor(); | 670 stroke_color = DebugColors::SurfaceDamageRectBorderColor(); |
614 fill_color = DebugColors::SurfaceDamageRectFillColor(); | 671 fill_color = DebugColors::SurfaceDamageRectFillColor(); |
615 stroke_width = DebugColors::SurfaceDamageRectBorderWidth(); | 672 stroke_width = DebugColors::SurfaceDamageRectBorderWidth(); |
616 break; | 673 break; |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
653 label_text = "repaints on scroll"; | 710 label_text = "repaints on scroll"; |
654 break; | 711 break; |
655 case ANIMATION_BOUNDS_RECT_TYPE: | 712 case ANIMATION_BOUNDS_RECT_TYPE: |
656 stroke_color = DebugColors::LayerAnimationBoundsBorderColor(); | 713 stroke_color = DebugColors::LayerAnimationBoundsBorderColor(); |
657 fill_color = DebugColors::LayerAnimationBoundsFillColor(); | 714 fill_color = DebugColors::LayerAnimationBoundsFillColor(); |
658 stroke_width = DebugColors::LayerAnimationBoundsBorderWidth(); | 715 stroke_width = DebugColors::LayerAnimationBoundsBorderWidth(); |
659 label_text = "animation bounds"; | 716 label_text = "animation bounds"; |
660 break; | 717 break; |
661 } | 718 } |
662 | 719 |
663 gfx::RectF debug_layer_rect = gfx::ScaleRect(debug_rects[i].rect, | 720 DrawDebugRect(canvas, |
664 1.0 / contents_scale_x(), | 721 paint, |
665 1.0 / contents_scale_y()); | 722 debug_rects[i], |
666 SkRect sk_rect = RectFToSkRect(debug_layer_rect); | 723 stroke_color, |
667 paint.setColor(fill_color); | 724 fill_color, |
668 paint.setStyle(SkPaint::kFill_Style); | 725 stroke_width, |
669 canvas->drawRect(sk_rect, paint); | 726 label_text); |
727 } | |
670 | 728 |
671 paint.setColor(stroke_color); | 729 if (new_paint_rects.size()) { |
672 paint.setStyle(SkPaint::kStroke_Style); | 730 paint_rects_.swap(new_paint_rects); |
danakj
2014/03/11 17:28:32
can you move the fade_step_ = DebugColors::kFadeSt
malch
2014/03/12 07:22:53
Done.
| |
673 paint.setStrokeWidth(SkFloatToScalar(stroke_width)); | 731 } |
674 canvas->drawRect(sk_rect, paint); | 732 if (fade_step_ > 0) { |
675 | 733 fade_step_--; |
676 if (label_text.length()) { | 734 for (size_t i = 0; i < paint_rects_.size(); ++i) { |
677 const int kFontHeight = 12; | 735 DrawDebugRect(canvas, |
678 const int kPadding = 3; | 736 paint, |
679 | 737 paint_rects_[i], |
680 canvas->save(); | 738 DebugColors::PaintRectBorderColor(fade_step_), |
681 canvas->clipRect(sk_rect); | 739 DebugColors::PaintRectFillColor(fade_step_), |
682 canvas->translate(sk_rect.x(), sk_rect.y()); | 740 DebugColors::PaintRectBorderWidth(), |
683 | 741 ""); |
684 SkPaint label_paint = CreatePaint(); | |
685 label_paint.setTextSize(kFontHeight); | |
686 label_paint.setTypeface(typeface_.get()); | |
687 label_paint.setColor(stroke_color); | |
688 | |
689 const SkScalar label_text_width = | |
690 label_paint.measureText(label_text.c_str(), label_text.length()); | |
691 canvas->drawRect(SkRect::MakeWH(label_text_width + 2 * kPadding, | |
692 kFontHeight + 2 * kPadding), | |
693 label_paint); | |
694 | |
695 label_paint.setAntiAlias(true); | |
696 label_paint.setColor(SkColorSetARGB(255, 50, 50, 50)); | |
697 canvas->drawText(label_text.c_str(), | |
698 label_text.length(), | |
699 kPadding, | |
700 kFontHeight * 0.8f + kPadding, | |
701 label_paint); | |
702 | |
703 canvas->restore(); | |
704 } | 742 } |
705 } | 743 } |
706 } | 744 } |
707 | 745 |
708 const char* HeadsUpDisplayLayerImpl::LayerTypeAsString() const { | 746 const char* HeadsUpDisplayLayerImpl::LayerTypeAsString() const { |
709 return "cc::HeadsUpDisplayLayerImpl"; | 747 return "cc::HeadsUpDisplayLayerImpl"; |
710 } | 748 } |
711 | 749 |
712 void HeadsUpDisplayLayerImpl::AsValueInto(base::DictionaryValue* dict) const { | 750 void HeadsUpDisplayLayerImpl::AsValueInto(base::DictionaryValue* dict) const { |
713 LayerImpl::AsValueInto(dict); | 751 LayerImpl::AsValueInto(dict); |
714 dict->SetString("layer_name", "Heads Up Display Layer"); | 752 dict->SetString("layer_name", "Heads Up Display Layer"); |
715 } | 753 } |
716 | 754 |
717 } // namespace cc | 755 } // namespace cc |
OLD | NEW |