OLD | NEW |
---|---|
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 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 "content/renderer/render_widget.h" | 5 #include "content/renderer/render_widget.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/command_line.h" | 8 #include "base/command_line.h" |
9 #include "base/debug/trace_event.h" | 9 #include "base/debug/trace_event.h" |
10 #include "base/logging.h" | 10 #include "base/logging.h" |
(...skipping 648 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
659 // which case we do not want to unfocus ourself. | 659 // which case we do not want to unfocus ourself. |
660 if (!has_focus_ && webwidget_) | 660 if (!has_focus_ && webwidget_) |
661 webwidget_->setFocus(false); | 661 webwidget_->setFocus(false); |
662 } | 662 } |
663 | 663 |
664 void RenderWidget::PaintRect(const gfx::Rect& rect, | 664 void RenderWidget::PaintRect(const gfx::Rect& rect, |
665 const gfx::Point& canvas_origin, | 665 const gfx::Point& canvas_origin, |
666 skia::PlatformCanvas* canvas) { | 666 skia::PlatformCanvas* canvas) { |
667 TRACE_EVENT2("renderer", "PaintRect", | 667 TRACE_EVENT2("renderer", "PaintRect", |
668 "width", rect.width(), "height", rect.height()); | 668 "width", rect.width(), "height", rect.height()); |
669 | |
nduca
2012/11/07 04:24:42
I wouldn't bother with static bool. Just check it
hartmanng
2012/11/07 14:45:02
Done.
| |
670 static bool kEnableGpuBenchmarking = | |
671 CommandLine::ForCurrentProcess()->HasSwitch( | |
672 switches::kEnableGpuBenchmarking); | |
673 | |
674 base::TimeTicks rasterize_begin_ticks; | |
675 if (kEnableGpuBenchmarking) | |
676 rasterize_begin_ticks = base::TimeTicks::HighResNow(); | |
669 canvas->save(); | 677 canvas->save(); |
670 | 678 |
671 // Bring the canvas into the coordinate system of the paint rect. | 679 // Bring the canvas into the coordinate system of the paint rect. |
672 canvas->translate(static_cast<SkScalar>(-canvas_origin.x()), | 680 canvas->translate(static_cast<SkScalar>(-canvas_origin.x()), |
673 static_cast<SkScalar>(-canvas_origin.y())); | 681 static_cast<SkScalar>(-canvas_origin.y())); |
674 | 682 |
675 // If there is a custom background, tile it. | 683 // If there is a custom background, tile it. |
676 if (!background_.empty()) { | 684 if (!background_.empty()) { |
677 SkPaint paint; | 685 SkPaint paint; |
678 SkShader* shader = SkShader::CreateBitmapShader(background_, | 686 SkShader* shader = SkShader::CreateBitmapShader(background_, |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
714 // GetBitmapForOptimizedPluginPaint in DoDeferredUpdate handles the | 722 // GetBitmapForOptimizedPluginPaint in DoDeferredUpdate handles the |
715 // painting, because that avoids copying the plugin image to a different | 723 // painting, because that avoids copying the plugin image to a different |
716 // paint rect. Unfortunately, if anything on the page is animating other | 724 // paint rect. Unfortunately, if anything on the page is animating other |
717 // than the movie, it break this optimization since the union of the | 725 // than the movie, it break this optimization since the union of the |
718 // invalid regions will be larger than the plugin. | 726 // invalid regions will be larger than the plugin. |
719 // | 727 // |
720 // This code optimizes that case, where we can still avoid painting in | 728 // This code optimizes that case, where we can still avoid painting in |
721 // WebKit and filling the background (which can be slow) and just painting | 729 // WebKit and filling the background (which can be slow) and just painting |
722 // the plugin. Unlike the DoDeferredUpdate case, an extra copy is still | 730 // the plugin. Unlike the DoDeferredUpdate case, an extra copy is still |
723 // required. | 731 // required. |
724 base::TimeTicks paint_begin_ticks = base::TimeTicks::Now(); | 732 base::TimeTicks paint_begin_ticks = base::TimeTicks::HighResNow(); |
725 SkAutoCanvasRestore auto_restore(canvas, true); | 733 SkAutoCanvasRestore auto_restore(canvas, true); |
726 canvas->scale(device_scale_factor_, device_scale_factor_); | 734 canvas->scale(device_scale_factor_, device_scale_factor_); |
727 optimized_instance->Paint(webkit_glue::ToWebCanvas(canvas), | 735 optimized_instance->Paint(webkit_glue::ToWebCanvas(canvas), |
728 optimized_copy_location, rect); | 736 optimized_copy_location, rect); |
729 canvas->restore(); | 737 canvas->restore(); |
730 base::TimeDelta paint_time = base::TimeTicks::Now() - paint_begin_ticks; | 738 base::TimeDelta paint_time = |
739 base::TimeTicks::HighResNow() - paint_begin_ticks; | |
731 if (!is_accelerated_compositing_active_) | 740 if (!is_accelerated_compositing_active_) |
732 software_stats_.totalPaintTimeInSeconds += paint_time.InSecondsF(); | 741 software_stats_.totalPaintTimeInSeconds += paint_time.InSecondsF(); |
733 } else { | 742 } else { |
734 // Normal painting case. | 743 // Normal painting case. |
735 base::TimeTicks paint_begin_ticks = base::TimeTicks::Now(); | 744 base::TimeTicks paint_begin_ticks = base::TimeTicks::HighResNow(); |
736 webwidget_->paint(webkit_glue::ToWebCanvas(canvas), rect); | 745 webwidget_->paint(webkit_glue::ToWebCanvas(canvas), rect); |
737 base::TimeDelta paint_time = base::TimeTicks::Now() - paint_begin_ticks; | 746 base::TimeDelta paint_time = |
747 base::TimeTicks::HighResNow() - paint_begin_ticks; | |
738 if (!is_accelerated_compositing_active_) | 748 if (!is_accelerated_compositing_active_) |
739 software_stats_.totalPaintTimeInSeconds += paint_time.InSecondsF(); | 749 software_stats_.totalPaintTimeInSeconds += paint_time.InSecondsF(); |
740 | 750 |
741 // Flush to underlying bitmap. TODO(darin): is this needed? | 751 // Flush to underlying bitmap. TODO(darin): is this needed? |
742 skia::GetTopDevice(*canvas)->accessBitmap(false); | 752 skia::GetTopDevice(*canvas)->accessBitmap(false); |
743 } | 753 } |
744 | 754 |
745 PaintDebugBorder(rect, canvas); | 755 PaintDebugBorder(rect, canvas); |
746 canvas->restore(); | 756 canvas->restore(); |
757 | |
758 if (kEnableGpuBenchmarking) { | |
759 base::TimeDelta rasterize_time = | |
760 base::TimeTicks::HighResNow() - rasterize_begin_ticks; | |
761 software_stats_.totalRasterizeTimeInSeconds += rasterize_time.InSecondsF(); | |
762 | |
763 int64 num_pixels_processed = rect.width() * rect.height(); | |
764 software_stats_.totalPixelsPainted += num_pixels_processed; | |
765 software_stats_.totalPixelsRasterized += num_pixels_processed; | |
766 } | |
747 } | 767 } |
748 | 768 |
749 void RenderWidget::PaintDebugBorder(const gfx::Rect& rect, | 769 void RenderWidget::PaintDebugBorder(const gfx::Rect& rect, |
750 skia::PlatformCanvas* canvas) { | 770 skia::PlatformCanvas* canvas) { |
751 static bool kPaintBorder = | 771 static bool kPaintBorder = |
752 CommandLine::ForCurrentProcess()->HasSwitch(switches::kShowPaintRects); | 772 CommandLine::ForCurrentProcess()->HasSwitch(switches::kShowPaintRects); |
753 if (!kPaintBorder) | 773 if (!kPaintBorder) |
754 return; | 774 return; |
755 | 775 |
756 // Cycle through these colors to help distinguish new paint rects. | 776 // Cycle through these colors to help distinguish new paint rects. |
(...skipping 1126 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1883 break; | 1903 break; |
1884 } | 1904 } |
1885 } | 1905 } |
1886 } | 1906 } |
1887 | 1907 |
1888 void RenderWidget::GetRenderingStats(WebKit::WebRenderingStats& stats) const { | 1908 void RenderWidget::GetRenderingStats(WebKit::WebRenderingStats& stats) const { |
1889 webwidget()->renderingStats(stats); | 1909 webwidget()->renderingStats(stats); |
1890 stats.numAnimationFrames += software_stats_.numAnimationFrames; | 1910 stats.numAnimationFrames += software_stats_.numAnimationFrames; |
1891 stats.numFramesSentToScreen += software_stats_.numFramesSentToScreen; | 1911 stats.numFramesSentToScreen += software_stats_.numFramesSentToScreen; |
1892 stats.totalPaintTimeInSeconds += software_stats_.totalPaintTimeInSeconds; | 1912 stats.totalPaintTimeInSeconds += software_stats_.totalPaintTimeInSeconds; |
1913 stats.totalPixelsPainted += software_stats_.totalPixelsPainted; | |
1914 stats.totalRasterizeTimeInSeconds += | |
1915 software_stats_.totalRasterizeTimeInSeconds; | |
1916 stats.totalPixelsRasterized += software_stats_.totalPixelsRasterized; | |
1893 } | 1917 } |
1894 | 1918 |
1895 bool RenderWidget::GetGpuRenderingStats(GpuRenderingStats* stats) const { | 1919 bool RenderWidget::GetGpuRenderingStats(GpuRenderingStats* stats) const { |
1896 GpuChannelHost* gpu_channel = RenderThreadImpl::current()->GetGpuChannel(); | 1920 GpuChannelHost* gpu_channel = RenderThreadImpl::current()->GetGpuChannel(); |
1897 if (!gpu_channel) | 1921 if (!gpu_channel) |
1898 return false; | 1922 return false; |
1899 | 1923 |
1900 return gpu_channel->CollectRenderingStatsForSurface(surface_id(), stats); | 1924 return gpu_channel->CollectRenderingStatsForSurface(surface_id(), stats); |
1901 } | 1925 } |
1902 | 1926 |
(...skipping 18 matching lines...) Expand all Loading... | |
1921 | 1945 |
1922 bool RenderWidget::WillHandleMouseEvent(const WebKit::WebMouseEvent& event) { | 1946 bool RenderWidget::WillHandleMouseEvent(const WebKit::WebMouseEvent& event) { |
1923 return false; | 1947 return false; |
1924 } | 1948 } |
1925 | 1949 |
1926 bool RenderWidget::WebWidgetHandlesCompositorScheduling() const { | 1950 bool RenderWidget::WebWidgetHandlesCompositorScheduling() const { |
1927 return false; | 1951 return false; |
1928 } | 1952 } |
1929 | 1953 |
1930 } // namespace content | 1954 } // namespace content |
OLD | NEW |