mirror of
https://github.com/mozilla/gecko-dev.git
synced 2025-02-26 20:30:41 +00:00

This saves about 270KB of codesize on Linux64 without LTO, or 20KB with LTO. The basic idea is that we can flag dictionaries that need to-JS conversion (hence ToObjectInternal) based on various IDL uses (return value in normal interface, argument in callback, etc) and then annotate the ones that are converted to JS manually in C++ code. The mozwebidlcodegen changes are needed because non-local changes (e.g. whether a dictionary is used as a return value somewhere) can now affect the code generation for a dictionary and hence whether the relevant binding file should be regenerated. Since these changes can happen in any .webidl file, we need to check for them. We can't track this via the dependency set on the dictionary itself, because that would not notice new uses being added. Differential Revision: https://phabricator.services.mozilla.com/D48006 --HG-- extra : moz-landing-system : lando
77 lines
2.1 KiB
Plaintext
77 lines
2.1 KiB
Plaintext
/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
|
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
|
|
* You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
*/
|
|
|
|
// For Javascript markers, the |stack| of a ProfileTimelineMarker
|
|
// holds an object of this type. It intentionally looks like a
|
|
// SavedStack object and is a representation of the frame that is
|
|
// about to be constructed at the entry point.
|
|
[GenerateConversionToJS]
|
|
dictionary ProfileTimelineStackFrame {
|
|
long line;
|
|
long column = 0;
|
|
DOMString source;
|
|
DOMString functionDisplayName;
|
|
object? parent = null;
|
|
object? asyncParent = null;
|
|
DOMString asyncCause;
|
|
};
|
|
|
|
dictionary ProfileTimelineLayerRect {
|
|
long x = 0;
|
|
long y = 0;
|
|
long width = 0;
|
|
long height = 0;
|
|
};
|
|
|
|
enum ProfileTimelineMessagePortOperationType {
|
|
"serializeData",
|
|
"deserializeData",
|
|
};
|
|
|
|
enum ProfileTimelineWorkerOperationType {
|
|
"serializeDataOffMainThread",
|
|
"serializeDataOnMainThread",
|
|
"deserializeDataOffMainThread",
|
|
"deserializeDataOnMainThread",
|
|
};
|
|
|
|
[GenerateConversionToJS]
|
|
dictionary ProfileTimelineMarker {
|
|
DOMString name = "";
|
|
DOMHighResTimeStamp start = 0;
|
|
DOMHighResTimeStamp end = 0;
|
|
object? stack = null;
|
|
|
|
unsigned short processType;
|
|
boolean isOffMainThread;
|
|
|
|
/* For ConsoleTime, Timestamp and Javascript markers. */
|
|
DOMString causeName;
|
|
|
|
/* For ConsoleTime markers. */
|
|
object? endStack = null;
|
|
|
|
/* For DOMEvent markers. */
|
|
DOMString type;
|
|
unsigned short eventPhase;
|
|
|
|
/* For document::DOMContentLoaded and document::Load markers. Using this
|
|
* instead of the `start` and `end` timestamps is strongly discouraged. */
|
|
unsigned long long unixTime; // in microseconds
|
|
|
|
/* For Paint markers. */
|
|
sequence<ProfileTimelineLayerRect> rectangles;
|
|
|
|
/* For Style markers. */
|
|
boolean isAnimationOnly;
|
|
|
|
/* For MessagePort markers. */
|
|
ProfileTimelineMessagePortOperationType messagePortOperation;
|
|
|
|
/* For Worker markers. */
|
|
ProfileTimelineWorkerOperationType workerOperation;
|
|
};
|