Commit 952fc216 authored by Yutaka Hirano's avatar Yutaka Hirano Committed by Commit Bot

Add use counters for ImageBitmap serialization / transfer

We would like to understand how common it is to serialize / transfer
non-Origin-clean ImageBitmap.

Bug: 1013087
Change-Id: Id593ee1e1e448d9cd234638d2e86d4893e13f8d5
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1852346
Commit-Queue: Yutaka Hirano <yhirano@chromium.org>
Reviewed-by: default avatarHiroki Nakagawa <nhiroki@chromium.org>
Cr-Commit-Position: refs/heads/master@{#705016}
parent 7d8b48a6
...@@ -2437,6 +2437,10 @@ enum WebFeature { ...@@ -2437,6 +2437,10 @@ enum WebFeature {
kUserTimingL3 = 3053, kUserTimingL3 = 3053,
kGetGamepadsFromCrossOriginSubframe = 3054, kGetGamepadsFromCrossOriginSubframe = 3054,
kGetGamepadsFromInsecureContext = 3055, kGetGamepadsFromInsecureContext = 3055,
kOriginCleanImageBitmapSerialization = 3056,
kNonOriginCleanImageBitmapSerialization = 3057,
kOriginCleanImageBitmapTransfer = 3058,
kNonOriginCleanImageBitmapTransfer = 3059,
// Add new features immediately above this line. Don't change assigned // Add new features immediately above this line. Don't change assigned
// numbers of any item, and don't reuse removed slots. // numbers of any item, and don't reuse removed slots.
......
...@@ -5,6 +5,7 @@ ...@@ -5,6 +5,7 @@
#include "third_party/blink/renderer/bindings/core/v8/serialization/v8_script_value_serializer.h" #include "third_party/blink/renderer/bindings/core/v8/serialization/v8_script_value_serializer.h"
#include "base/auto_reset.h" #include "base/auto_reset.h"
#include "third_party/blink/public/mojom/web_feature/web_feature.mojom-blink.h"
#include "third_party/blink/public/platform/web_blob_info.h" #include "third_party/blink/public/platform/web_blob_info.h"
#include "third_party/blink/renderer/bindings/core/v8/to_v8_for_core.h" #include "third_party/blink/renderer/bindings/core/v8/to_v8_for_core.h"
#include "third_party/blink/renderer/bindings/core/v8/v8_blob.h" #include "third_party/blink/renderer/bindings/core/v8/v8_blob.h"
...@@ -28,6 +29,7 @@ ...@@ -28,6 +29,7 @@
#include "third_party/blink/renderer/bindings/core/v8/v8_throw_dom_exception.h" #include "third_party/blink/renderer/bindings/core/v8/v8_throw_dom_exception.h"
#include "third_party/blink/renderer/bindings/core/v8/v8_transform_stream.h" #include "third_party/blink/renderer/bindings/core/v8/v8_transform_stream.h"
#include "third_party/blink/renderer/bindings/core/v8/v8_writable_stream.h" #include "third_party/blink/renderer/bindings/core/v8/v8_writable_stream.h"
#include "third_party/blink/renderer/core/execution_context/execution_context.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_read_only.h" #include "third_party/blink/renderer/core/geometry/dom_matrix_read_only.h"
#include "third_party/blink/renderer/core/geometry/dom_point.h" #include "third_party/blink/renderer/core/geometry/dom_point.h"
...@@ -42,6 +44,7 @@ ...@@ -42,6 +44,7 @@
#include "third_party/blink/renderer/core/streams/writable_stream.h" #include "third_party/blink/renderer/core/streams/writable_stream.h"
#include "third_party/blink/renderer/core/typed_arrays/dom_array_buffer_base.h" #include "third_party/blink/renderer/core/typed_arrays/dom_array_buffer_base.h"
#include "third_party/blink/renderer/platform/file_metadata.h" #include "third_party/blink/renderer/platform/file_metadata.h"
#include "third_party/blink/renderer/platform/instrumentation/use_counter.h"
#include "third_party/blink/renderer/platform/runtime_enabled_features.h" #include "third_party/blink/renderer/platform/runtime_enabled_features.h"
#include "third_party/blink/renderer/platform/wtf/allocator/partitions.h" #include "third_party/blink/renderer/platform/wtf/allocator/partitions.h"
#include "third_party/blink/renderer/platform/wtf/date_math.h" #include "third_party/blink/renderer/platform/wtf/date_math.h"
...@@ -258,11 +261,20 @@ bool V8ScriptValueSerializer::WriteDOMObject(ScriptWrappable* wrappable, ...@@ -258,11 +261,20 @@ bool V8ScriptValueSerializer::WriteDOMObject(ScriptWrappable* wrappable,
return false; return false;
} }
auto* execution_context = ExecutionContext::From(script_state_.Get());
// If this ImageBitmap was transferred, it can be serialized by index. // If this ImageBitmap was transferred, it can be serialized by index.
size_t index = kNotFound; size_t index = kNotFound;
if (transferables_) if (transferables_)
index = transferables_->image_bitmaps.Find(image_bitmap); index = transferables_->image_bitmaps.Find(image_bitmap);
if (index != kNotFound) { if (index != kNotFound) {
if (image_bitmap->OriginClean()) {
execution_context->CountUse(
mojom::WebFeature::kOriginCleanImageBitmapTransfer);
} else {
execution_context->CountUse(
mojom::WebFeature::kNonOriginCleanImageBitmapTransfer);
}
DCHECK_LE(index, std::numeric_limits<uint32_t>::max()); DCHECK_LE(index, std::numeric_limits<uint32_t>::max());
WriteTag(kImageBitmapTransferTag); WriteTag(kImageBitmapTransferTag);
WriteUint32(static_cast<uint32_t>(index)); WriteUint32(static_cast<uint32_t>(index));
...@@ -270,6 +282,13 @@ bool V8ScriptValueSerializer::WriteDOMObject(ScriptWrappable* wrappable, ...@@ -270,6 +282,13 @@ bool V8ScriptValueSerializer::WriteDOMObject(ScriptWrappable* wrappable,
} }
// Otherwise, it must be fully serialized. // Otherwise, it must be fully serialized.
if (image_bitmap->OriginClean()) {
execution_context->CountUse(
mojom::WebFeature::kOriginCleanImageBitmapSerialization);
} else {
execution_context->CountUse(
mojom::WebFeature::kNonOriginCleanImageBitmapSerialization);
}
WriteTag(kImageBitmapTag); WriteTag(kImageBitmapTag);
SerializedColorParams color_params(image_bitmap->GetCanvasColorParams()); SerializedColorParams color_params(image_bitmap->GetCanvasColorParams());
WriteUint32Enum(ImageSerializationTag::kCanvasColorSpaceTag); WriteUint32Enum(ImageSerializationTag::kCanvasColorSpaceTag);
......
...@@ -24920,6 +24920,10 @@ Called by update_net_error_codes.py.--> ...@@ -24920,6 +24920,10 @@ Called by update_net_error_codes.py.-->
<int value="3053" label="UserTimingL3"/> <int value="3053" label="UserTimingL3"/>
<int value="3054" label="GetGamepadsFromCrossOriginSubframe"/> <int value="3054" label="GetGamepadsFromCrossOriginSubframe"/>
<int value="3055" label="GetGamepadsFromInsecureContext"/> <int value="3055" label="GetGamepadsFromInsecureContext"/>
<int value="3056" label="OriginCleanImageBitmapSerialization"/>
<int value="3057" label="NonOriginCleanImageBitmapSerialization"/>
<int value="3058" label="OriginCleanImageBitmapTransfer"/>
<int value="3059" label="NonOriginCleanImageBitmapTransfer"/>
</enum> </enum>
<enum name="FeaturePolicyAllowlistType"> <enum name="FeaturePolicyAllowlistType">
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