void CSSParserImpl::parseStyleSheet(const String& string, const CSSParserContext& context, StyleSheetContents* styleSheet) { TRACE_EVENT_BEGIN2( "blink,blink_style", "CSSParserImpl::parseStyleSheet", "baseUrl", context.baseURL().string().utf8(), "mode", context.mode()); TRACE_EVENT_BEGIN0("blink,blink_style", "CSSParserImpl::parseStyleSheet.tokenize"); CSSTokenizer::Scope scope(string); TRACE_EVENT_END0("blink,blink_style", "CSSParserImpl::parseStyleSheet.tokenize"); TRACE_EVENT_BEGIN0("blink,blink_style", "CSSParserImpl::parseStyleSheet.parse"); CSSParserImpl parser(context, styleSheet); bool firstRuleValid = parser.consumeRuleList(scope.tokenRange(), TopLevelRuleList, [&styleSheet](PassRefPtrWillBeRawPtr<StyleRuleBase> rule) { if (rule->isCharsetRule()) return; styleSheet->parserAppendRule(rule); }); styleSheet->setHasSyntacticallyValidCSSHeader(firstRuleValid); TRACE_EVENT_END0("blink,blink_style", "CSSParserImpl::parseStyleSheet.parse"); TRACE_EVENT_END2( "blink,blink_style", "CSSParserImpl::parseStyleSheet", "tokenCount", scope.tokenCount(), "length", string.length()); }
void V8GCController::gcPrologue(v8::Isolate* isolate, v8::GCType type, v8::GCCallbackFlags flags) { if (isMainThread()) ScriptForbiddenScope::enter(); // TODO(haraken): A GC callback is not allowed to re-enter V8. This means // that it's unsafe to run Oilpan's GC in the GC callback because it may // run finalizers that call into V8. To avoid the risk, we should post // a task to schedule the Oilpan's GC. // (In practice, there is no finalizer that calls into V8 and thus is safe.) v8::HandleScope scope(isolate); switch (type) { case v8::kGCTypeScavenge: if (ThreadState::current()) ThreadState::current()->willStartV8GC(BlinkGC::V8MinorGC); TRACE_EVENT_BEGIN1("devtools.timeline,v8", "MinorGC", "usedHeapSizeBefore", usedHeapSize(isolate)); visitWeakHandlesForMinorGC(isolate); break; case v8::kGCTypeMarkSweepCompact: if (ThreadState::current()) ThreadState::current()->willStartV8GC(BlinkGC::V8MajorGC); TRACE_EVENT_BEGIN2("devtools.timeline,v8", "MajorGC", "usedHeapSizeBefore", usedHeapSize(isolate), "type", "atomic pause"); gcPrologueForMajorGC(isolate, flags & v8::kGCCallbackFlagConstructRetainedObjectInfos); break; case v8::kGCTypeIncrementalMarking: if (ThreadState::current()) ThreadState::current()->willStartV8GC(BlinkGC::V8MajorGC); TRACE_EVENT_BEGIN2("devtools.timeline,v8", "MajorGC", "usedHeapSizeBefore", usedHeapSize(isolate), "type", "incremental marking"); gcPrologueForMajorGC(isolate, flags & v8::kGCCallbackFlagConstructRetainedObjectInfos); break; case v8::kGCTypeProcessWeakCallbacks: TRACE_EVENT_BEGIN2("devtools.timeline,v8", "MajorGC", "usedHeapSizeBefore", usedHeapSize(isolate), "type", "weak processing"); break; default: ASSERT_NOT_REACHED(); } }