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

Side by Side Diff: cc/layers/heads_up_display_layer_impl.cc

Issue 187343007: Adding fading effect for paint rectangles in HUD. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fixes. Created 6 years, 9 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 | « cc/layers/heads_up_display_layer_impl.h ('k') | cc/trees/layer_tree_host_impl.cc » ('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 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
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
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
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
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
OLDNEW
« no previous file with comments | « cc/layers/heads_up_display_layer_impl.h ('k') | cc/trees/layer_tree_host_impl.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698