Commit aff00809 authored by David Quiroz Marin's avatar David Quiroz Marin Committed by Commit Bot

Add Canvas.DrawImage by size histogram

Also adding histogram functions to the allowed list of identifiers
for third_party/blink/renderer/ to be able to use those functions
instead of the macro versions.

Change-Id: I9759c075ce2eff5face0d6c4af9758a64b7e1f68
Reviewed-on: https://chromium-review.googlesource.com/c/1308762
Commit-Queue: David Quiroz Marin <davidqu@chromium.org>
Reviewed-by: default avatarAlexei Svitkine <asvitkine@chromium.org>
Reviewed-by: default avatarJeremy Roman <jbroman@chromium.org>
Reviewed-by: default avatarFernando Serboncini <fserb@chromium.org>
Cr-Commit-Position: refs/heads/master@{#605727}
parent 2afaea49
...@@ -9,36 +9,18 @@ ...@@ -9,36 +9,18 @@
#include <memory> #include <memory>
#include "base/metrics/histogram_functions.h" #include "base/metrics/histogram_functions.h"
#include "base/metrics/histogram_macros.h"
#include "base/numerics/checked_math.h"
#include "third_party/blink/renderer/core/css/cssom/css_url_image_value.h" #include "third_party/blink/renderer/core/css/cssom/css_url_image_value.h"
#include "third_party/blink/renderer/core/css/parser/css_parser.h" #include "third_party/blink/renderer/core/css/parser/css_parser.h"
#include "third_party/blink/renderer/core/execution_context/execution_context.h"
#include "third_party/blink/renderer/core/html/canvas/html_canvas_element.h"
#include "third_party/blink/renderer/core/html/canvas/image_data.h"
#include "third_party/blink/renderer/core/html/canvas/text_metrics.h" #include "third_party/blink/renderer/core/html/canvas/text_metrics.h"
#include "third_party/blink/renderer/core/html/html_image_element.h" #include "third_party/blink/renderer/core/html/html_image_element.h"
#include "third_party/blink/renderer/core/html/media/html_video_element.h" #include "third_party/blink/renderer/core/html/media/html_video_element.h"
#include "third_party/blink/renderer/core/imagebitmap/image_bitmap.h" #include "third_party/blink/renderer/core/imagebitmap/image_bitmap.h"
#include "third_party/blink/renderer/core/offscreencanvas/offscreen_canvas.h"
#include "third_party/blink/renderer/core/svg/svg_image_element.h" #include "third_party/blink/renderer/core/svg/svg_image_element.h"
#include "third_party/blink/renderer/core/typed_arrays/array_buffer_view_helpers.h"
#include "third_party/blink/renderer/modules/canvas/canvas2d/canvas_gradient.h"
#include "third_party/blink/renderer/modules/canvas/canvas2d/canvas_pattern.h" #include "third_party/blink/renderer/modules/canvas/canvas2d/canvas_pattern.h"
#include "third_party/blink/renderer/modules/canvas/canvas2d/canvas_style.h"
#include "third_party/blink/renderer/modules/canvas/canvas2d/path_2d.h" #include "third_party/blink/renderer/modules/canvas/canvas2d/path_2d.h"
#include "third_party/blink/renderer/platform/bindings/exception_state.h"
#include "third_party/blink/renderer/platform/bindings/script_state.h"
#include "third_party/blink/renderer/platform/geometry/float_quad.h" #include "third_party/blink/renderer/platform/geometry/float_quad.h"
#include "third_party/blink/renderer/platform/graphics/canvas_heuristic_parameters.h"
#include "third_party/blink/renderer/platform/graphics/color.h"
#include "third_party/blink/renderer/platform/graphics/image.h"
#include "third_party/blink/renderer/platform/graphics/paint/paint_canvas.h"
#include "third_party/blink/renderer/platform/graphics/paint/paint_flags.h"
#include "third_party/blink/renderer/platform/graphics/skia/skia_utils.h" #include "third_party/blink/renderer/platform/graphics/skia/skia_utils.h"
#include "third_party/blink/renderer/platform/graphics/stroke_data.h" #include "third_party/blink/renderer/platform/graphics/stroke_data.h"
#include "third_party/blink/renderer/platform/histogram.h"
#include "third_party/blink/renderer/platform/wtf/math_extras.h"
namespace blink { namespace blink {
...@@ -1291,30 +1273,50 @@ void BaseRenderingContext2D::drawImage(ScriptState* script_state, ...@@ -1291,30 +1273,50 @@ void BaseRenderingContext2D::drawImage(ScriptState* script_state,
: CanvasRenderingContext2DState::kNonOpaqueImage); : CanvasRenderingContext2DState::kNonOpaqueImage);
ValidateStateStack(); ValidateStateStack();
bool source_is_canvas = false;
if (!IsPaint2D()) { if (!IsPaint2D()) {
std::string histogram_name = "Blink.Canvas.DrawImage.Duration."; std::string image_source_name;
if (image_source->IsCanvasElement()) { if (image_source->IsCanvasElement()) {
histogram_name.append("Canvas."); image_source_name = "Canvas";
source_is_canvas = true;
} else if (image_source->IsCSSImageValue()) { } else if (image_source->IsCSSImageValue()) {
histogram_name.append("CssImage."); image_source_name = "CssImage";
} else if (image_source->IsImageElement()) { } else if (image_source->IsImageElement()) {
histogram_name.append("ImageElement."); image_source_name = "ImageElement";
} else if (image_source->IsImageBitmap()) { } else if (image_source->IsImageBitmap()) {
histogram_name.append("ImageBitmap."); image_source_name = "ImageBitmap";
} else if (image_source->IsOffscreenCanvas()) { } else if (image_source->IsOffscreenCanvas()) {
histogram_name.append("OffscreenCanvas."); image_source_name = "OffscreenCanvas";
source_is_canvas = true;
} else if (image_source->IsSVGSource()) { } else if (image_source->IsSVGSource()) {
histogram_name.append("SVG."); image_source_name = "SVG";
} else if (image_source->IsVideoElement()) { } else if (image_source->IsVideoElement()) {
histogram_name.append("Video."); image_source_name = "Video";
} else { // Unknown source. } else { // Unknown source.
histogram_name.append("Unknown."); image_source_name = "Unknown";
}
std::string duration_histogram_name =
"Blink.Canvas.DrawImage.Duration." + image_source_name;
std::string size_histogram_name =
"Blink.Canvas.DrawImage.SqrtNumberOfPixels." + image_source_name;
if (CanCreateCanvas2dResourceProvider() && IsAccelerated()) {
if (source_is_canvas)
size_histogram_name.append(".GPU");
duration_histogram_name.append(".GPU");
} else {
if (source_is_canvas)
size_histogram_name.append(".CPU");
duration_histogram_name.append(".CPU");
} }
histogram_name.append(
CanCreateCanvas2dResourceProvider() && IsAccelerated() ? "GPU" : "CPU"); int sqrt_pixels = std::sqrt(dst_rect.Width() * dst_rect.Height());
base::TimeDelta elapsed = TimeTicks::Now() - start_time; base::TimeDelta elapsed = TimeTicks::Now() - start_time;
UmaHistogramMicrosecondsTimes(histogram_name, elapsed);
base::UmaHistogramMicrosecondsTimes(duration_histogram_name, elapsed);
base::UmaHistogramCustomCounts(size_histogram_name, sqrt_pixels, 1, 5000,
50);
} }
} }
...@@ -1667,11 +1669,11 @@ ImageData* BaseRenderingContext2D::getImageData( ...@@ -1667,11 +1669,11 @@ ImageData* BaseRenderingContext2D::getImageData(
int scaled_time = getScaledElapsedTime( int scaled_time = getScaledElapsedTime(
image_data_rect.Width(), image_data_rect.Height(), start_time); image_data_rect.Width(), image_data_rect.Height(), start_time);
if (CanCreateCanvas2dResourceProvider() && IsAccelerated()) { if (CanCreateCanvas2dResourceProvider() && IsAccelerated()) {
UMA_HISTOGRAM_COUNTS_1000("Blink.Canvas.GetImageDataScaledDuration.GPU", base::UmaHistogramCounts1000(
scaled_time); "Blink.Canvas.GetImageDataScaledDuration.GPU", scaled_time);
} else { } else {
UMA_HISTOGRAM_COUNTS_1000("Blink.Canvas.GetImageDataScaledDuration.CPU", base::UmaHistogramCounts1000(
scaled_time); "Blink.Canvas.GetImageDataScaledDuration.CPU", scaled_time);
} }
} }
...@@ -1773,11 +1775,11 @@ void BaseRenderingContext2D::putImageData(ImageData* data, ...@@ -1773,11 +1775,11 @@ void BaseRenderingContext2D::putImageData(ImageData* data,
int scaled_time = int scaled_time =
getScaledElapsedTime(dest_rect.Width(), dest_rect.Height(), start_time); getScaledElapsedTime(dest_rect.Width(), dest_rect.Height(), start_time);
if (CanCreateCanvas2dResourceProvider() && IsAccelerated()) { if (CanCreateCanvas2dResourceProvider() && IsAccelerated()) {
UMA_HISTOGRAM_COUNTS_1000("Blink.Canvas.PutImageDataScaledDuration.GPU", base::UmaHistogramCounts1000(
scaled_time); "Blink.Canvas.PutImageDataScaledDuration.GPU", scaled_time);
} else { } else {
UMA_HISTOGRAM_COUNTS_1000("Blink.Canvas.PutImageDataScaledDuration.CPU", base::UmaHistogramCounts1000(
scaled_time); "Blink.Canvas.PutImageDataScaledDuration.CPU", scaled_time);
} }
} }
......
...@@ -5,24 +5,15 @@ ...@@ -5,24 +5,15 @@
#ifndef THIRD_PARTY_BLINK_RENDERER_MODULES_CANVAS_CANVAS2D_BASE_RENDERING_CONTEXT_2D_H_ #ifndef THIRD_PARTY_BLINK_RENDERER_MODULES_CANVAS_CANVAS2D_BASE_RENDERING_CONTEXT_2D_H_
#define THIRD_PARTY_BLINK_RENDERER_MODULES_CANVAS_CANVAS2D_BASE_RENDERING_CONTEXT_2D_H_ #define THIRD_PARTY_BLINK_RENDERER_MODULES_CANVAS_CANVAS2D_BASE_RENDERING_CONTEXT_2D_H_
#include <utility>
#include "third_party/blink/renderer/bindings/modules/v8/canvas_image_source.h" #include "third_party/blink/renderer/bindings/modules/v8/canvas_image_source.h"
#include "third_party/blink/renderer/bindings/modules/v8/string_or_canvas_gradient_or_canvas_pattern.h" #include "third_party/blink/renderer/bindings/modules/v8/string_or_canvas_gradient_or_canvas_pattern.h"
#include "third_party/blink/renderer/core/geometry/dom_matrix.h" #include "third_party/blink/renderer/core/geometry/dom_matrix.h"
#include "third_party/blink/renderer/core/geometry/dom_matrix_2d_init.h"
#include "third_party/blink/renderer/core/html/canvas/image_data.h" #include "third_party/blink/renderer/core/html/canvas/image_data.h"
#include "third_party/blink/renderer/modules/canvas/canvas2d/canvas_gradient.h" #include "third_party/blink/renderer/modules/canvas/canvas2d/canvas_gradient.h"
#include "third_party/blink/renderer/modules/canvas/canvas2d/canvas_path.h" #include "third_party/blink/renderer/modules/canvas/canvas2d/canvas_path.h"
#include "third_party/blink/renderer/modules/canvas/canvas2d/canvas_rendering_context_2d_state.h" #include "third_party/blink/renderer/modules/canvas/canvas2d/canvas_rendering_context_2d_state.h"
#include "third_party/blink/renderer/modules/canvas/canvas2d/canvas_style.h" #include "third_party/blink/renderer/modules/canvas/canvas2d/canvas_style.h"
#include "third_party/blink/renderer/modules/modules_export.h"
#include "third_party/blink/renderer/platform/graphics/canvas_heuristic_parameters.h" #include "third_party/blink/renderer/platform/graphics/canvas_heuristic_parameters.h"
#include "third_party/blink/renderer/platform/graphics/color_behavior.h"
#include "third_party/blink/renderer/platform/graphics/paint/paint_canvas.h"
#include "third_party/blink/renderer/platform/graphics/paint/paint_flags.h"
#include "third_party/blink/renderer/platform/graphics/static_bitmap_image.h"
#include "third_party/skia/include/effects/SkComposeImageFilter.h"
namespace blink { namespace blink {
class CanvasImageSource; class CanvasImageSource;
......
...@@ -86,6 +86,9 @@ _CONFIG = [ ...@@ -86,6 +86,9 @@ _CONFIG = [
# //base/allocator/partition_allocator/oom_callback.h. # //base/allocator/partition_allocator/oom_callback.h.
'base::SetPartitionAllocOomCallback', 'base::SetPartitionAllocOomCallback',
# //base/metrics/histogram_functions.h
'base::UmaHistogram.+',
# //base/metrics/field_trial_params.h. # //base/metrics/field_trial_params.h.
'base::GetFieldTrialParamValueByFeature', 'base::GetFieldTrialParamValueByFeature',
'base::GetFieldTrialParamByFeatureAsBool', 'base::GetFieldTrialParamByFeatureAsBool',
......
...@@ -8893,6 +8893,16 @@ uploading your change for review. ...@@ -8893,6 +8893,16 @@ uploading your change for review.
</summary> </summary>
</histogram> </histogram>
<histogram base="true" name="Blink.Canvas.DrawImage.SqrtNumberOfPixels"
units="sqrt(pixels)" expires_after="2019-12-31">
<owner>fserb@chromium.org</owner>
<owner>davidqu@chromium.org</owner>
<summary>
Stores the square root of the number of pixels drawn into a Canvas.
Different histograms per CanvasImageSource.
</summary>
</histogram>
<histogram name="Blink.Canvas.GetImageData" units="microseconds"> <histogram name="Blink.Canvas.GetImageData" units="microseconds">
<obsolete> <obsolete>
Replaced with Blink.Canvas.GetImageDataScaledDuration in 10/2018. Replaced with Blink.Canvas.GetImageDataScaledDuration in 10/2018.
...@@ -125021,6 +125031,20 @@ uploading your change for review. ...@@ -125021,6 +125031,20 @@ uploading your change for review.
<affected-histogram name="WebRTC.Stun.BatchSuccessPercent.UnknownNAT"/> <affected-histogram name="WebRTC.Stun.BatchSuccessPercent.UnknownNAT"/>
</histogram_suffixes> </histogram_suffixes>
<histogram_suffixes name="BlinkCanvasDrawImageSizeType" separator=".">
<suffix name="Canvas.CPU"/>
<suffix name="Canvas.GPU"/>
<suffix name="CssImage"/>
<suffix name="ImageBitmap"/>
<suffix name="ImageElement"/>
<suffix name="OffscreenCanvas.CPU"/>
<suffix name="OffscreenCanvas.GPU"/>
<suffix name="SVG"/>
<suffix name="Unknown"/>
<suffix name="Video"/>
<affected-histogram name="Blink.Canvas.DrawImage.SqrtNumberOfPixels"/>
</histogram_suffixes>
<histogram_suffixes name="BlinkCanvasDrawImageType" separator="."> <histogram_suffixes name="BlinkCanvasDrawImageType" separator=".">
<suffix base="true" name="Canvas"/> <suffix base="true" name="Canvas"/>
<suffix base="true" name="CssImage"/> <suffix base="true" name="CssImage"/>
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment