Commit cd6c2790 authored by Chris Hamilton's avatar Chris Hamilton Committed by Commit Bot

Define WorkletTokens.

Like workers, this defines a collection of tokens for identifying
distinct Worklets. This also updates ExecutionContextToken so that it is
able to name all possible ExecutionContext types. All of these token
types will be used by the performance.measureMemory API.

BUG=1085129

Change-Id: I8ad41aeac689278f1e47502c98855dd4aec41b3e
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2354451Reviewed-by: default avatarDaniel Cheng <dcheng@chromium.org>
Commit-Queue: Chris Hamilton <chrisha@chromium.org>
Cr-Commit-Position: refs/heads/master@{#798082}
parent 8286d4a5
......@@ -128,6 +128,89 @@ blink::SharedWorkerToken UnionTraits<
return token.GetAs<blink::SharedWorkerToken>();
}
////////////////////////////////////////////////////////////////////////////////
// WORKLET TOKENS
//////////////
// WorkletToken
// static
bool UnionTraits<blink::mojom::WorkletTokenDataView, blink::WorkletToken>::Read(
blink::mojom::WorkletTokenDataView input,
blink::WorkletToken* output) {
using Tag = blink::mojom::WorkletTokenDataView::Tag;
switch (input.tag()) {
case Tag::ANIMATION_WORKLET_TOKEN: {
blink::AnimationWorkletToken token;
bool ret = input.ReadAnimationWorkletToken(&token);
*output = token;
return ret;
}
case Tag::AUDIO_WORKLET_TOKEN: {
blink::AudioWorkletToken token;
bool ret = input.ReadAudioWorkletToken(&token);
*output = token;
return ret;
}
case Tag::LAYOUT_WORKLET_TOKEN: {
blink::LayoutWorkletToken token;
bool ret = input.ReadLayoutWorkletToken(&token);
*output = token;
return ret;
}
case Tag::PAINT_WORKLET_TOKEN: {
blink::PaintWorkletToken token;
bool ret = input.ReadPaintWorkletToken(&token);
*output = token;
return ret;
}
}
return false;
}
// static
blink::mojom::WorkletTokenDataView::Tag
UnionTraits<blink::mojom::WorkletTokenDataView, blink::WorkletToken>::GetTag(
const blink::WorkletToken& token) {
using Tag = blink::mojom::WorkletTokenDataView::Tag;
if (token.Is<blink::AnimationWorkletToken>())
return Tag::ANIMATION_WORKLET_TOKEN;
if (token.Is<blink::AudioWorkletToken>())
return Tag::AUDIO_WORKLET_TOKEN;
if (token.Is<blink::LayoutWorkletToken>())
return Tag::LAYOUT_WORKLET_TOKEN;
DCHECK(token.Is<blink::PaintWorkletToken>());
return Tag::PAINT_WORKLET_TOKEN;
}
// static
blink::AnimationWorkletToken
UnionTraits<blink::mojom::WorkletTokenDataView, blink::WorkletToken>::
animation_worklet_token(const blink::WorkletToken& token) {
return token.GetAs<blink::AnimationWorkletToken>();
}
// static
blink::AudioWorkletToken
UnionTraits<blink::mojom::WorkletTokenDataView, blink::WorkletToken>::
audio_worklet_token(const blink::WorkletToken& token) {
return token.GetAs<blink::AudioWorkletToken>();
}
// static
blink::LayoutWorkletToken
UnionTraits<blink::mojom::WorkletTokenDataView, blink::WorkletToken>::
layout_worklet_token(const blink::WorkletToken& token) {
return token.GetAs<blink::LayoutWorkletToken>();
}
// static
blink::PaintWorkletToken
UnionTraits<blink::mojom::WorkletTokenDataView, blink::WorkletToken>::
paint_worklet_token(const blink::WorkletToken& token) {
return token.GetAs<blink::PaintWorkletToken>();
}
////////////////////////////////////////////////////////////////////////////////
// OTHER TOKENS
//
......@@ -138,14 +221,14 @@ blink::SharedWorkerToken UnionTraits<
// keep the following list in alphabetic order.
///////////////////////////////////
// ExecutionContextAttributionToken
// ExecutionContextToken
// static
bool UnionTraits<blink::mojom::ExecutionContextAttributionTokenDataView,
blink::ExecutionContextAttributionToken>::
Read(blink::mojom::ExecutionContextAttributionTokenDataView input,
blink::ExecutionContextAttributionToken* output) {
using Tag = blink::mojom::ExecutionContextAttributionTokenDataView::Tag;
bool UnionTraits<blink::mojom::ExecutionContextTokenDataView,
blink::ExecutionContextToken>::
Read(blink::mojom::ExecutionContextTokenDataView input,
blink::ExecutionContextToken* output) {
using Tag = blink::mojom::ExecutionContextTokenDataView::Tag;
switch (input.tag()) {
case Tag::LOCAL_FRAME_TOKEN: {
blink::LocalFrameToken token;
......@@ -171,57 +254,119 @@ bool UnionTraits<blink::mojom::ExecutionContextAttributionTokenDataView,
*output = token;
return ret;
}
case Tag::ANIMATION_WORKLET_TOKEN: {
blink::AnimationWorkletToken token;
bool ret = input.ReadAnimationWorkletToken(&token);
*output = token;
return ret;
}
case Tag::AUDIO_WORKLET_TOKEN: {
blink::AudioWorkletToken token;
bool ret = input.ReadAudioWorkletToken(&token);
*output = token;
return ret;
}
case Tag::LAYOUT_WORKLET_TOKEN: {
blink::LayoutWorkletToken token;
bool ret = input.ReadLayoutWorkletToken(&token);
*output = token;
return ret;
}
case Tag::PAINT_WORKLET_TOKEN: {
blink::PaintWorkletToken token;
bool ret = input.ReadPaintWorkletToken(&token);
*output = token;
return ret;
}
}
return false;
}
// static
blink::mojom::ExecutionContextAttributionTokenDataView::Tag
UnionTraits<blink::mojom::ExecutionContextAttributionTokenDataView,
blink::ExecutionContextAttributionToken>::
GetTag(const blink::ExecutionContextAttributionToken& token) {
using Tag = blink::mojom::ExecutionContextAttributionTokenDataView::Tag;
blink::mojom::ExecutionContextTokenDataView::Tag UnionTraits<
blink::mojom::ExecutionContextTokenDataView,
blink::ExecutionContextToken>::GetTag(const blink::ExecutionContextToken&
token) {
using Tag = blink::mojom::ExecutionContextTokenDataView::Tag;
if (token.Is<blink::LocalFrameToken>())
return Tag::LOCAL_FRAME_TOKEN;
if (token.Is<blink::DedicatedWorkerToken>())
return Tag::DEDICATED_WORKER_TOKEN;
if (token.Is<blink::ServiceWorkerToken>())
return Tag::SERVICE_WORKER_TOKEN;
DCHECK(token.Is<blink::SharedWorkerToken>());
return Tag::SHARED_WORKER_TOKEN;
if (token.Is<blink::SharedWorkerToken>())
return Tag::SHARED_WORKER_TOKEN;
if (token.Is<blink::AnimationWorkletToken>())
return Tag::ANIMATION_WORKLET_TOKEN;
if (token.Is<blink::AudioWorkletToken>())
return Tag::AUDIO_WORKLET_TOKEN;
if (token.Is<blink::LayoutWorkletToken>())
return Tag::LAYOUT_WORKLET_TOKEN;
DCHECK(token.Is<blink::PaintWorkletToken>());
return Tag::PAINT_WORKLET_TOKEN;
}
// static
blink::LocalFrameToken
UnionTraits<blink::mojom::ExecutionContextAttributionTokenDataView,
blink::ExecutionContextAttributionToken>::
local_frame_token(const blink::ExecutionContextAttributionToken& token) {
blink::LocalFrameToken UnionTraits<blink::mojom::ExecutionContextTokenDataView,
blink::ExecutionContextToken>::
local_frame_token(const blink::ExecutionContextToken& token) {
return token.GetAs<blink::LocalFrameToken>();
}
// static
blink::DedicatedWorkerToken
UnionTraits<blink::mojom::ExecutionContextAttributionTokenDataView,
blink::ExecutionContextAttributionToken>::
dedicated_worker_token(
const blink::ExecutionContextAttributionToken& token) {
UnionTraits<blink::mojom::ExecutionContextTokenDataView,
blink::ExecutionContextToken>::
dedicated_worker_token(const blink::ExecutionContextToken& token) {
return token.GetAs<blink::DedicatedWorkerToken>();
}
// static
blink::ServiceWorkerToken
UnionTraits<blink::mojom::ExecutionContextAttributionTokenDataView,
blink::ExecutionContextAttributionToken>::
service_worker_token(const blink::ExecutionContextAttributionToken& token) {
UnionTraits<blink::mojom::ExecutionContextTokenDataView,
blink::ExecutionContextToken>::
service_worker_token(const blink::ExecutionContextToken& token) {
return token.GetAs<blink::ServiceWorkerToken>();
}
// static
blink::SharedWorkerToken
UnionTraits<blink::mojom::ExecutionContextAttributionTokenDataView,
blink::ExecutionContextAttributionToken>::
shared_worker_token(const blink::ExecutionContextAttributionToken& token) {
UnionTraits<blink::mojom::ExecutionContextTokenDataView,
blink::ExecutionContextToken>::
shared_worker_token(const blink::ExecutionContextToken& token) {
return token.GetAs<blink::SharedWorkerToken>();
}
// static
blink::AnimationWorkletToken
UnionTraits<blink::mojom::ExecutionContextTokenDataView,
blink::ExecutionContextToken>::
animation_worklet_token(const blink::ExecutionContextToken& token) {
return token.GetAs<blink::AnimationWorkletToken>();
}
// static
blink::AudioWorkletToken
UnionTraits<blink::mojom::ExecutionContextTokenDataView,
blink::ExecutionContextToken>::
audio_worklet_token(const blink::ExecutionContextToken& token) {
return token.GetAs<blink::AudioWorkletToken>();
}
// static
blink::LayoutWorkletToken
UnionTraits<blink::mojom::ExecutionContextTokenDataView,
blink::ExecutionContextToken>::
layout_worklet_token(const blink::ExecutionContextToken& token) {
return token.GetAs<blink::LayoutWorkletToken>();
}
// static
blink::PaintWorkletToken
UnionTraits<blink::mojom::ExecutionContextTokenDataView,
blink::ExecutionContextToken>::
paint_worklet_token(const blink::ExecutionContextToken& token) {
return token.GetAs<blink::PaintWorkletToken>();
}
} // namespace mojo
......@@ -50,19 +50,42 @@ TEST(WorkerTokenTest, MojomTraits) {
blink::SharedWorkerToken>();
}
TEST(ExecutionContextAttributionTokenTest, MojomTraits) {
ExpectSerializationWorks<blink::ExecutionContextAttributionToken,
blink::mojom::ExecutionContextAttributionToken,
TEST(WorkletTokenTest, MojomTraits) {
ExpectSerializationWorks<blink::WorkletToken, blink::mojom::WorkletToken,
blink::AnimationWorkletToken>();
ExpectSerializationWorks<blink::WorkletToken, blink::mojom::WorkletToken,
blink::AudioWorkletToken>();
ExpectSerializationWorks<blink::WorkletToken, blink::mojom::WorkletToken,
blink::LayoutWorkletToken>();
ExpectSerializationWorks<blink::WorkletToken, blink::mojom::WorkletToken,
blink::PaintWorkletToken>();
}
TEST(ExecutionContextTokenTest, MojomTraits) {
ExpectSerializationWorks<blink::ExecutionContextToken,
blink::mojom::ExecutionContextToken,
blink::LocalFrameToken>();
ExpectSerializationWorks<blink::ExecutionContextAttributionToken,
blink::mojom::ExecutionContextAttributionToken,
ExpectSerializationWorks<blink::ExecutionContextToken,
blink::mojom::ExecutionContextToken,
blink::DedicatedWorkerToken>();
ExpectSerializationWorks<blink::ExecutionContextAttributionToken,
blink::mojom::ExecutionContextAttributionToken,
ExpectSerializationWorks<blink::ExecutionContextToken,
blink::mojom::ExecutionContextToken,
blink::ServiceWorkerToken>();
ExpectSerializationWorks<blink::ExecutionContextAttributionToken,
blink::mojom::ExecutionContextAttributionToken,
ExpectSerializationWorks<blink::ExecutionContextToken,
blink::mojom::ExecutionContextToken,
blink::SharedWorkerToken>();
ExpectSerializationWorks<blink::ExecutionContextToken,
blink::mojom::ExecutionContextToken,
blink::AnimationWorkletToken>();
ExpectSerializationWorks<blink::ExecutionContextToken,
blink::mojom::ExecutionContextToken,
blink::AudioWorkletToken>();
ExpectSerializationWorks<blink::ExecutionContextToken,
blink::mojom::ExecutionContextToken,
blink::LayoutWorkletToken>();
ExpectSerializationWorks<blink::ExecutionContextToken,
blink::mojom::ExecutionContextToken,
blink::PaintWorkletToken>();
}
} // namespace mojo
......@@ -58,6 +58,28 @@ using SharedWorkerToken = util::TokenType<class SharedWorkerTokenTypeMarker>;
using WorkerToken =
MultiToken<DedicatedWorkerToken, ServiceWorkerToken, SharedWorkerToken>;
////////////////////////////////////////////////////////////////////////////////
// WORKLET TOKENS
// Identifies an animation worklet.
using AnimationWorkletToken =
util::TokenType<class AnimationWorkletTokenTypeMarker>;
// Identifies an audio worklet.
using AudioWorkletToken = util::TokenType<class AudioWorkletTokenTypeMarker>;
// Identifies a layout worklet.
using LayoutWorkletToken = util::TokenType<class LayoutWorkletTokenTypeMarker>;
// Identifies a paint worklet.
using PaintWorkletToken = util::TokenType<class PaintWorkletTokenTypeMarker>;
// Can represent any type of WorkletToken.
using WorkletToken = MultiToken<AnimationWorkletToken,
AudioWorkletToken,
LayoutWorkletToken,
PaintWorkletToken>;
////////////////////////////////////////////////////////////////////////////////
// OTHER TOKENS
//
......@@ -67,15 +89,16 @@ using WorkerToken =
// their own section, in alphabetical order. If adding a new token here, please
// keep the following list in alphabetic order.
// Identifies an ExecutionContext hosted in a renderer for the purposes of
// memory and CPU attribution. Worklets are not tracked independently, but
// simply attributed to their parent context, hence only LocalFrames and workers
// can be named. As such, it is possible for multiple ExecutionContexts to have
// the same ExecutionContextAttributionToken.
using ExecutionContextAttributionToken = MultiToken<LocalFrameToken,
DedicatedWorkerToken,
ServiceWorkerToken,
SharedWorkerToken>;
// Identifies an arbitrary ExecutionContext. Each concrete implementation of an
// ExecutionContext has a distinct token type that can be represented here.
using ExecutionContextToken = MultiToken<LocalFrameToken,
DedicatedWorkerToken,
ServiceWorkerToken,
SharedWorkerToken,
AnimationWorkletToken,
AudioWorkletToken,
LayoutWorkletToken,
PaintWorkletToken>;
// Identifies a blink::PortalContents / blink::HTMLPortalElement in the
// renderer process, and a content::Portal in the browser process.
......
......@@ -84,6 +84,54 @@ struct BLINK_COMMON_EXPORT
const blink::WorkerToken& token);
};
////////////////////////////////////////////////////////////////////////////////
// WORKLET TOKENS
template <>
struct StructTraits<blink::mojom::AnimationWorkletTokenDataView,
blink::AnimationWorkletToken>
: public blink::TokenMojomTraitsHelper<
blink::mojom::AnimationWorkletTokenDataView,
blink::AnimationWorkletToken> {};
template <>
struct StructTraits<blink::mojom::AudioWorkletTokenDataView,
blink::AudioWorkletToken>
: public blink::TokenMojomTraitsHelper<
blink::mojom::AudioWorkletTokenDataView,
blink::AudioWorkletToken> {};
template <>
struct StructTraits<blink::mojom::LayoutWorkletTokenDataView,
blink::LayoutWorkletToken>
: public blink::TokenMojomTraitsHelper<
blink::mojom::LayoutWorkletTokenDataView,
blink::LayoutWorkletToken> {};
template <>
struct StructTraits<blink::mojom::PaintWorkletTokenDataView,
blink::PaintWorkletToken>
: public blink::TokenMojomTraitsHelper<
blink::mojom::PaintWorkletTokenDataView,
blink::PaintWorkletToken> {};
template <>
struct BLINK_COMMON_EXPORT
UnionTraits<blink::mojom::WorkletTokenDataView, blink::WorkletToken> {
static bool Read(blink::mojom::WorkletTokenDataView input,
blink::WorkletToken* output);
static blink::mojom::WorkletTokenDataView::Tag GetTag(
const blink::WorkletToken& token);
static blink::AnimationWorkletToken animation_worklet_token(
const blink::WorkletToken& token);
static blink::AudioWorkletToken audio_worklet_token(
const blink::WorkletToken& token);
static blink::LayoutWorkletToken layout_worklet_token(
const blink::WorkletToken& token);
static blink::PaintWorkletToken paint_worklet_token(
const blink::WorkletToken& token);
};
////////////////////////////////////////////////////////////////////////////////
// OTHER TOKENS
//
......@@ -95,20 +143,28 @@ struct BLINK_COMMON_EXPORT
template <>
struct BLINK_COMMON_EXPORT
UnionTraits<blink::mojom::ExecutionContextAttributionTokenDataView,
blink::ExecutionContextAttributionToken> {
static bool Read(blink::mojom::ExecutionContextAttributionTokenDataView input,
blink::ExecutionContextAttributionToken* output);
static blink::mojom::ExecutionContextAttributionTokenDataView::Tag GetTag(
const blink::ExecutionContextAttributionToken& token);
UnionTraits<blink::mojom::ExecutionContextTokenDataView,
blink::ExecutionContextToken> {
static bool Read(blink::mojom::ExecutionContextTokenDataView input,
blink::ExecutionContextToken* output);
static blink::mojom::ExecutionContextTokenDataView::Tag GetTag(
const blink::ExecutionContextToken& token);
static blink::LocalFrameToken local_frame_token(
const blink::ExecutionContextAttributionToken& token);
const blink::ExecutionContextToken& token);
static blink::DedicatedWorkerToken dedicated_worker_token(
const blink::ExecutionContextAttributionToken& token);
const blink::ExecutionContextToken& token);
static blink::ServiceWorkerToken service_worker_token(
const blink::ExecutionContextAttributionToken& token);
const blink::ExecutionContextToken& token);
static blink::SharedWorkerToken shared_worker_token(
const blink::ExecutionContextAttributionToken& token);
const blink::ExecutionContextToken& token);
static blink::AnimationWorkletToken animation_worklet_token(
const blink::ExecutionContextToken& token);
static blink::AudioWorkletToken audio_worklet_token(
const blink::ExecutionContextToken& token);
static blink::LayoutWorkletToken layout_worklet_token(
const blink::ExecutionContextToken& token);
static blink::PaintWorkletToken paint_worklet_token(
const blink::ExecutionContextToken& token);
};
template <>
......
......@@ -46,6 +46,24 @@ mojom_component("tokens") {
cpp = "::blink::WorkerToken"
},
# WORKLET TOKENS
{
mojom = "blink.mojom.AnimationWorkletToken"
cpp = "::blink::AnimationWorkletToken"
},
{
mojom = "blink.mojom.AudioWorkletToken"
cpp = "::blink::AudioWorkletToken"
},
{
mojom = "blink.mojom.PaintWorkletToken"
cpp = "::blink::PaintWorkletToken"
},
{
mojom = "blink.mojom.WorkletToken"
cpp = "::blink::WorkletToken"
},
# OTHER TOKENS
#
# Keep this section last.
......@@ -54,8 +72,8 @@ mojom_component("tokens") {
# them to their own section, in alphabetical order. If adding a new
# token here, please keep the following list in alphabetic order.
{
mojom = "blink.mojom.ExecutionContextAttributionToken"
cpp = "::blink::ExecutionContextAttributionToken"
mojom = "blink.mojom.ExecutionContextToken"
cpp = "::blink::ExecutionContextToken"
},
{
mojom = "blink.mojom.PortalToken"
......
......@@ -53,6 +53,32 @@ union WorkerToken {
SharedWorkerToken shared_worker_token;
};
////////////////////////////////////////////////////////////////////////////////
// WORKLET TOKENS
struct AnimationWorkletToken {
mojo_base.mojom.UnguessableToken value;
};
struct AudioWorkletToken {
mojo_base.mojom.UnguessableToken value;
};
struct LayoutWorkletToken {
mojo_base.mojom.UnguessableToken value;
};
struct PaintWorkletToken {
mojo_base.mojom.UnguessableToken value;
};
union WorkletToken {
AnimationWorkletToken animation_worklet_token;
AudioWorkletToken audio_worklet_token;
LayoutWorkletToken layout_worklet_token;
PaintWorkletToken paint_worklet_token;
};
////////////////////////////////////////////////////////////////////////////////
// OTHER TOKENS
//
......@@ -62,11 +88,15 @@ union WorkerToken {
// their own section, in alphabetical order. If adding a new token here, please
// keep the following list in alphabetic order.
union ExecutionContextAttributionToken {
union ExecutionContextToken {
LocalFrameToken local_frame_token;
DedicatedWorkerToken dedicated_worker_token;
ServiceWorkerToken service_worker_token;
SharedWorkerToken shared_worker_token;
AnimationWorkletToken animation_worklet_token;
AudioWorkletToken audio_worklet_token;
LayoutWorkletToken layout_worklet_token;
PaintWorkletToken paint_worklet_token;
};
struct PortalToken {
......
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