diff options
Diffstat (limited to 'chromium/third_party/blink/renderer/core/timing/performance_user_timing.cc')
-rw-r--r-- | chromium/third_party/blink/renderer/core/timing/performance_user_timing.cc | 85 |
1 files changed, 11 insertions, 74 deletions
diff --git a/chromium/third_party/blink/renderer/core/timing/performance_user_timing.cc b/chromium/third_party/blink/renderer/core/timing/performance_user_timing.cc index 597cd102ca1..e7fe5a559f5 100644 --- a/chromium/third_party/blink/renderer/core/timing/performance_user_timing.cc +++ b/chromium/third_party/blink/renderer/core/timing/performance_user_timing.cc @@ -25,8 +25,9 @@ #include "third_party/blink/renderer/core/timing/performance_user_timing.h" +#include "third_party/blink/renderer/bindings/core/v8/v8_performance_mark_options.h" +#include "third_party/blink/renderer/core/execution_context/execution_context.h" #include "third_party/blink/renderer/core/timing/performance_mark.h" -#include "third_party/blink/renderer/core/timing/performance_mark_options.h" #include "third_party/blink/renderer/core/timing/performance_measure.h" #include "third_party/blink/renderer/platform/bindings/exception_state.h" #include "third_party/blink/renderer/platform/instrumentation/tracing/trace_event.h" @@ -34,45 +35,6 @@ namespace blink { -namespace { - -typedef uint64_t (PerformanceTiming::*NavigationTimingFunction)() const; -using RestrictedKeyMap = HashMap<AtomicString, NavigationTimingFunction>; - -const RestrictedKeyMap& GetRestrictedKeyMap() { - DEFINE_THREAD_SAFE_STATIC_LOCAL(ThreadSpecific<RestrictedKeyMap>, map, ()); - if (!map.IsSet()) { - *map = { - {"navigationStart", &PerformanceTiming::navigationStart}, - {"unloadEventStart", &PerformanceTiming::unloadEventStart}, - {"unloadEventEnd", &PerformanceTiming::unloadEventEnd}, - {"redirectStart", &PerformanceTiming::redirectStart}, - {"redirectEnd", &PerformanceTiming::redirectEnd}, - {"fetchStart", &PerformanceTiming::fetchStart}, - {"domainLookupStart", &PerformanceTiming::domainLookupStart}, - {"domainLookupEnd", &PerformanceTiming::domainLookupEnd}, - {"connectStart", &PerformanceTiming::connectStart}, - {"connectEnd", &PerformanceTiming::connectEnd}, - {"secureConnectionStart", &PerformanceTiming::secureConnectionStart}, - {"requestStart", &PerformanceTiming::requestStart}, - {"responseStart", &PerformanceTiming::responseStart}, - {"responseEnd", &PerformanceTiming::responseEnd}, - {"domLoading", &PerformanceTiming::domLoading}, - {"domInteractive", &PerformanceTiming::domInteractive}, - {"domContentLoadedEventStart", - &PerformanceTiming::domContentLoadedEventStart}, - {"domContentLoadedEventEnd", - &PerformanceTiming::domContentLoadedEventEnd}, - {"domComplete", &PerformanceTiming::domComplete}, - {"loadEventStart", &PerformanceTiming::loadEventStart}, - {"loadEventEnd", &PerformanceTiming::loadEventEnd}, - }; - } - return *map; -} - -} // namespace - UserTiming::UserTiming(Performance& performance) : performance_(&performance) {} static void InsertPerformanceEntry(PerformanceEntryMap& performance_entry_map, @@ -103,35 +65,7 @@ PerformanceMark* UserTiming::CreatePerformanceMark( const AtomicString& mark_name, PerformanceMarkOptions* mark_options, ExceptionState& exception_state) { - DOMHighResTimeStamp start = 0.0; - if (mark_options && mark_options->hasStartTime()) { - start = mark_options->startTime(); - if (start < 0.0) { - exception_state.ThrowTypeError("'" + mark_name + - "' cannot have a negative start time."); - return nullptr; - } - } else { - start = performance_->now(); - } - - ScriptValue detail = ScriptValue::CreateNull(script_state->GetIsolate()); - if (mark_options) - detail = mark_options->detail(); - - bool is_worker_global_scope = - performance_->GetExecutionContext() && - performance_->GetExecutionContext()->IsWorkerGlobalScope(); - if (!is_worker_global_scope && GetRestrictedKeyMap().Contains(mark_name)) { - exception_state.ThrowDOMException( - DOMExceptionCode::kSyntaxError, - "'" + mark_name + - "' is part of the PerformanceTiming interface, and " - "cannot be used as a mark name."); - return nullptr; - } - - return PerformanceMark::Create(script_state, mark_name, start, detail, + return PerformanceMark::Create(script_state, mark_name, mark_options, exception_state); } @@ -152,11 +86,14 @@ void UserTiming::ClearMarks(const AtomicString& mark_name) { double UserTiming::FindExistingMarkStartTime(const AtomicString& mark_name, ExceptionState& exception_state) { - if (marks_map_.Contains(mark_name)) - return marks_map_.at(mark_name).back()->startTime(); + PerformanceEntryMap::const_iterator existing_marks = + marks_map_.find(mark_name); + if (existing_marks != marks_map_.end()) { + return existing_marks->value.back()->startTime(); + } - NavigationTimingFunction timing_function = - GetRestrictedKeyMap().at(mark_name); + PerformanceTiming::PerformanceTimingGetter timing_function = + PerformanceTiming::GetAttributeMapping().at(mark_name); if (!timing_function) { exception_state.ThrowDOMException( DOMExceptionCode::kSyntaxError, @@ -306,7 +243,7 @@ PerformanceEntryVector UserTiming::GetMeasures(const AtomicString& name) const { return GetEntrySequenceByName(measures_map_, name); } -void UserTiming::Trace(blink::Visitor* visitor) { +void UserTiming::Trace(Visitor* visitor) { visitor->Trace(performance_); visitor->Trace(marks_map_); visitor->Trace(measures_map_); |