Index: third_party/WebKit/Source/bindings/core/v8/V8ScriptRunner.cpp |
diff --git a/third_party/WebKit/Source/bindings/core/v8/V8ScriptRunner.cpp b/third_party/WebKit/Source/bindings/core/v8/V8ScriptRunner.cpp |
index 602b20abe4471f58ea9c155062e9ccd259da1263..afbb437f1acbb80e40044d06fde5ad6f06517502 100644 |
--- a/third_party/WebKit/Source/bindings/core/v8/V8ScriptRunner.cpp |
+++ b/third_party/WebKit/Source/bindings/core/v8/V8ScriptRunner.cpp |
@@ -138,10 +138,9 @@ v8::MaybeLocal<v8::Script> compileWithoutOptions(V8CompileHistogram::Cacheabilit |
} |
// Compile a script, and consume a V8 cache that was generated previously. |
-v8::MaybeLocal<v8::Script> compileAndConsumeCache(CachedMetadataHandler* cacheHandler, unsigned tag, v8::ScriptCompiler::CompileOptions compileOptions, v8::Isolate* isolate, v8::Local<v8::String> code, v8::ScriptOrigin origin) |
+static v8::MaybeLocal<v8::Script> compileAndConsumeCache(CachedMetadataHandler* cacheHandler, PassRefPtr<CachedMetadata> cachedMetadata, v8::ScriptCompiler::CompileOptions compileOptions, v8::Isolate* isolate, v8::Local<v8::String> code, v8::ScriptOrigin origin) |
{ |
V8CompileHistogram histogramScope(V8CompileHistogram::Cacheable); |
- CachedMetadata* cachedMetadata = cacheHandler->cachedMetadata(tag); |
const char* data = cachedMetadata->data(); |
int length = cachedMetadata->size(); |
v8::ScriptCompiler::CachedData* cachedData = new v8::ScriptCompiler::CachedData( |
@@ -179,8 +178,9 @@ v8::MaybeLocal<v8::Script> compileAndProduceCache(CachedMetadataHandler* cacheHa |
// given resource already has cached data available. |
v8::MaybeLocal<v8::Script> compileAndConsumeOrProduce(CachedMetadataHandler* cacheHandler, unsigned tag, v8::ScriptCompiler::CompileOptions consumeOptions, v8::ScriptCompiler::CompileOptions produceOptions, CachedMetadataHandler::CacheType cacheType, v8::Isolate* isolate, v8::Local<v8::String> code, v8::ScriptOrigin origin) |
{ |
- return cacheHandler->cachedMetadata(tag) |
- ? compileAndConsumeCache(cacheHandler, tag, consumeOptions, isolate, code, origin) |
+ RefPtr<CachedMetadata> codeCache(cacheHandler->cachedMetadata(tag)); |
+ return codeCache.get() |
hiroshige
2016/08/25 12:48:11
We can remove .get() here.
|
+ ? compileAndConsumeCache(cacheHandler, codeCache, consumeOptions, isolate, code, origin) |
: compileAndProduceCache(cacheHandler, tag, produceOptions, cacheType, isolate, code, origin); |
} |
@@ -212,7 +212,7 @@ bool isResourceHotForCaching(CachedMetadataHandler* cacheHandler, int hotHours) |
{ |
const double cacheWithinSeconds = hotHours * 60 * 60; |
unsigned tag = cacheTag(CacheTagTimeStamp, cacheHandler); |
- CachedMetadata* cachedMetadata = cacheHandler->cachedMetadata(tag); |
+ RefPtr<CachedMetadata> cachedMetadata = cacheHandler->cachedMetadata(tag); |
if (!cachedMetadata) |
return false; |
double timeStamp; |
@@ -276,7 +276,7 @@ std::unique_ptr<CompileFn> bind(const A&... args) |
// Select a compile function from any of the above, mainly depending on |
// cacheOptions. |
-std::unique_ptr<CompileFn> selectCompileFunction(V8CacheOptions cacheOptions, CachedMetadataHandler* cacheHandler, v8::Local<v8::String> code, V8CompileHistogram::Cacheability cacheabilityIfNoHandler) |
+static std::unique_ptr<CompileFn> selectCompileFunction(V8CacheOptions cacheOptions, CachedMetadataHandler* cacheHandler, PassRefPtr<CachedMetadata> codeCache, v8::Local<v8::String> code, V8CompileHistogram::Cacheability cacheabilityIfNoHandler) |
{ |
static const int minimalCodeLength = 1024; |
static const int hotHours = 72; |
@@ -305,14 +305,13 @@ std::unique_ptr<CompileFn> selectCompileFunction(V8CacheOptions cacheOptions, Ca |
case V8CacheOptionsAlways: { |
// Use code caching for recently seen resources. |
// Use compression depending on the cache option. |
- unsigned codeCacheTag = cacheTag(CacheTagCode, cacheHandler); |
- CachedMetadata* codeCache = cacheHandler->cachedMetadata(codeCacheTag); |
if (codeCache) |
- return bind(compileAndConsumeCache, wrapPersistent(cacheHandler), codeCacheTag, v8::ScriptCompiler::kConsumeCodeCache); |
+ return bind(compileAndConsumeCache, wrapPersistent(cacheHandler), codeCache, v8::ScriptCompiler::kConsumeCodeCache); |
if (cacheOptions != V8CacheOptionsAlways && !isResourceHotForCaching(cacheHandler, hotHours)) { |
V8ScriptRunner::setCacheTimeStamp(cacheHandler); |
return bind(compileWithoutOptions, V8CompileHistogram::Cacheable); |
} |
+ unsigned codeCacheTag = cacheTag(CacheTagCode, cacheHandler); |
return bind(compileAndProduceCache, wrapPersistent(cacheHandler), codeCacheTag, v8::ScriptCompiler::kProduceCodeCache, CachedMetadataHandler::SendToPlatform); |
break; |
} |
@@ -385,9 +384,10 @@ v8::MaybeLocal<v8::Script> V8ScriptRunner::compileScript(v8::Local<v8::String> c |
if (!cacheHandler && (scriptStartPosition.m_line.zeroBasedInt() == 0) && (scriptStartPosition.m_column.zeroBasedInt() == 0)) |
cacheabilityIfNoHandler = V8CompileHistogram::Cacheability::InlineScript; |
+ RefPtr<CachedMetadata> codeCache(cacheHandler ? cacheHandler->cachedMetadata(cacheTag(CacheTagCode, cacheHandler)) : nullptr); |
std::unique_ptr<CompileFn> compileFn = streamer |
? selectCompileFunction(cacheOptions, resource, streamer) |
- : selectCompileFunction(cacheOptions, cacheHandler, code, cacheabilityIfNoHandler); |
+ : selectCompileFunction(cacheOptions, cacheHandler, codeCache, code, cacheabilityIfNoHandler); |
return (*compileFn)(isolate, code, origin); |
} |