Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(181)

Side by Side Diff: Source/bindings/core/v8/V8ScriptRunnerTest.cpp

Issue 549533002: Follow-on to "Restore in-memory parser cache for V8 compile" (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: rebase Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « Source/bindings/core/v8/V8ScriptRunner.cpp ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "config.h" 5 #include "config.h"
6 #include "bindings/core/v8/V8ScriptRunner.h" 6 #include "bindings/core/v8/V8ScriptRunner.h"
7 7
8 #include "bindings/core/v8/V8Binding.h"
8 #include "core/fetch/ScriptResource.h" 9 #include "core/fetch/ScriptResource.h"
9 #include "platform/heap/Handle.h" 10 #include "platform/heap/Handle.h"
10 #include <gtest/gtest.h> 11 #include <gtest/gtest.h>
11 #include <v8.h> 12 #include <v8.h>
12 13
13 namespace blink { 14 namespace blink {
14 15
15 namespace { 16 namespace {
16 17
17 class V8ScriptRunnerTest : public ::testing::Test { 18 class V8ScriptRunnerTest : public ::testing::Test {
18 public: 19 public:
19 V8ScriptRunnerTest() { } 20 V8ScriptRunnerTest() : m_scope(v8::Isolate::GetCurrent()) { }
20 virtual ~V8ScriptRunnerTest() { } 21 virtual ~V8ScriptRunnerTest() { }
21 22
22 static void SetUpTestCase()
23 {
24 cacheTagParser = StringHash::hash(v8::V8::GetVersion()) * 2;
25 cacheTagCode = cacheTagParser + 1;
26 }
27
28 virtual void SetUp() OVERRIDE 23 virtual void SetUp() OVERRIDE
29 { 24 {
30 // To trick various layers of caching, increment a counter for each 25 // To trick various layers of caching, increment a counter for each
31 // test and use it in code(), fielname() and url(). 26 // test and use it in code(), fielname() and url().
32 counter++; 27 counter++;
33 } 28 }
34 29
35 virtual void TearDown() OVERRIDE 30 virtual void TearDown() OVERRIDE
36 { 31 {
37 m_resourceRequest.clear(); 32 m_resourceRequest.clear();
38 m_resource.clear(); 33 m_resource.clear();
39 } 34 }
40 35
41 v8::Isolate* isolate() 36 v8::Isolate* isolate() const
42 { 37 {
43 return v8::Isolate::GetCurrent(); 38 return m_scope.isolate();
44 } 39 }
45 v8::Local<v8::String> v8String(const char* value) 40 WTF::String code() const
46 {
47 return v8::String::NewFromOneByte(
48 isolate(), reinterpret_cast<const uint8_t*>(value));
49 }
50 v8::Local<v8::String> v8String(const WTF::String& value)
51 {
52 return v8String(value.ascii().data());
53 }
54 WTF::String code()
55 { 41 {
56 // Simple function for testing. Note: 42 // Simple function for testing. Note:
57 // - Add counter to trick V8 code cache. 43 // - Add counter to trick V8 code cache.
58 // - Pad counter to 1000 digits, to trick minimal cacheability threshold . 44 // - Pad counter to 1000 digits, to trick minimal cacheability threshold .
59 return WTF::String::format("a = function() { 1 + 1; } // %01000d\n", cou nter); 45 return WTF::String::format("a = function() { 1 + 1; } // %01000d\n", cou nter);
60 } 46 }
61 WTF::String filename() 47 WTF::String filename() const
62 { 48 {
63 return WTF::String::format("whatever%d.js", counter); 49 return WTF::String::format("whatever%d.js", counter);
64 } 50 }
65 WTF::String url() 51 WTF::String url() const
66 { 52 {
67 return WTF::String::format("http://bla.com/bla%d", counter); 53 return WTF::String::format("http://bla.com/bla%d", counter);
68 } 54 }
55 unsigned tagForParserCache() const
56 {
57 return StringHash::hash(v8::V8::GetVersion()) * 2;
58 }
59 unsigned tagForCodeCache() const
60 {
61 return tagForParserCache() + 1;
62 }
69 63
70 bool compileScript(V8CacheOptions cacheOptions) 64 bool compileScript(V8CacheOptions cacheOptions)
71 { 65 {
72 v8::HandleScope handleScope(isolate());
73 v8::Local<v8::Context> context = v8::Context::New(isolate());
74 v8::Context::Scope contextScope(context);
75 return !V8ScriptRunner::compileScript( 66 return !V8ScriptRunner::compileScript(
76 v8String(code()), filename(), WTF::TextPosition(), m_resource.get(), 67 v8String(isolate(), code()), filename(), WTF::TextPosition(),
77 isolate(), NotSharableCrossOrigin, cacheOptions) 68 m_resource.get(), isolate(), NotSharableCrossOrigin, cacheOptions)
78 .IsEmpty(); 69 .IsEmpty();
79 } 70 }
80 71
81 void setEmptyResource() 72 void setEmptyResource()
82 { 73 {
83 m_resourceRequest = WTF::adoptPtr(new ResourceRequest); 74 m_resourceRequest = WTF::adoptPtr(new ResourceRequest);
84 m_resource = adoptPtrWillBeNoop(new ScriptResource(*m_resourceRequest.ge t(), "text/utf-8")); 75 m_resource = adoptPtrWillBeNoop(new ScriptResource(*m_resourceRequest.ge t(), "text/utf-8"));
85 } 76 }
86 77
87 void setResource() 78 void setResource()
88 { 79 {
89 m_resourceRequest = WTF::adoptPtr(new ResourceRequest(url())); 80 m_resourceRequest = WTF::adoptPtr(new ResourceRequest(url()));
90 m_resource = adoptPtrWillBeNoop(new ScriptResource(*m_resourceRequest.ge t(), "text/utf-8")); 81 m_resource = adoptPtrWillBeNoop(new ScriptResource(*m_resourceRequest.ge t(), "text/utf-8"));
91 } 82 }
92 83
93 protected: 84 protected:
94 WTF::OwnPtr<ResourceRequest> m_resourceRequest; 85 WTF::OwnPtr<ResourceRequest> m_resourceRequest;
95 OwnPtrWillBePersistent<ScriptResource> m_resource; 86 OwnPtrWillBePersistent<ScriptResource> m_resource;
87 V8TestingScope m_scope;
96 88
97 static unsigned cacheTagParser;
98 static unsigned cacheTagCode;
99 static int counter; 89 static int counter;
100 }; 90 };
101 91
102 unsigned V8ScriptRunnerTest::cacheTagParser = 0;
103 unsigned V8ScriptRunnerTest::cacheTagCode = 0;
104 int V8ScriptRunnerTest::counter = 0; 92 int V8ScriptRunnerTest::counter = 0;
105 93
106 TEST_F(V8ScriptRunnerTest, resourcelessShouldPass) 94 TEST_F(V8ScriptRunnerTest, resourcelessShouldPass)
107 { 95 {
108 EXPECT_TRUE(compileScript(V8CacheOptionsOff)); 96 EXPECT_TRUE(compileScript(V8CacheOptionsOff));
109 EXPECT_TRUE(compileScript(V8CacheOptionsParse)); 97 EXPECT_TRUE(compileScript(V8CacheOptionsParse));
110 EXPECT_TRUE(compileScript(V8CacheOptionsCode)); 98 EXPECT_TRUE(compileScript(V8CacheOptionsCode));
111 } 99 }
112 100
113 TEST_F(V8ScriptRunnerTest, emptyResourceDoesNothing) 101 TEST_F(V8ScriptRunnerTest, emptyResourceDoesNothing)
114 { 102 {
115 setEmptyResource(); 103 setEmptyResource();
116 EXPECT_TRUE(compileScript(V8CacheOptionsOff)); 104 EXPECT_TRUE(compileScript(V8CacheOptionsOff));
117 EXPECT_FALSE(m_resource->cachedMetadata(cacheTagParser)); 105 EXPECT_FALSE(m_resource->cachedMetadata(tagForParserCache()));
118 EXPECT_FALSE(m_resource->cachedMetadata(cacheTagCode)); 106 EXPECT_FALSE(m_resource->cachedMetadata(tagForCodeCache()));
119 107
120 EXPECT_TRUE(compileScript(V8CacheOptionsParse)); 108 EXPECT_TRUE(compileScript(V8CacheOptionsParse));
121 EXPECT_FALSE(m_resource->cachedMetadata(cacheTagParser)); 109 EXPECT_FALSE(m_resource->cachedMetadata(tagForParserCache()));
122 EXPECT_FALSE(m_resource->cachedMetadata(cacheTagCode)); 110 EXPECT_FALSE(m_resource->cachedMetadata(tagForCodeCache()));
123 111
124 EXPECT_TRUE(compileScript(V8CacheOptionsCode)); 112 EXPECT_TRUE(compileScript(V8CacheOptionsCode));
125 EXPECT_FALSE(m_resource->cachedMetadata(cacheTagParser)); 113 EXPECT_FALSE(m_resource->cachedMetadata(tagForParserCache()));
126 EXPECT_FALSE(m_resource->cachedMetadata(cacheTagCode)); 114 EXPECT_FALSE(m_resource->cachedMetadata(tagForCodeCache()));
127 } 115 }
128 116
129 TEST_F(V8ScriptRunnerTest, defaultOptions) 117 TEST_F(V8ScriptRunnerTest, defaultOptions)
130 { 118 {
131 setResource(); 119 setResource();
132 EXPECT_TRUE(compileScript(V8CacheOptionsOff)); 120 EXPECT_TRUE(compileScript(V8CacheOptionsOff));
133 EXPECT_TRUE(m_resource->cachedMetadata(cacheTagParser)); 121 EXPECT_TRUE(m_resource->cachedMetadata(tagForParserCache()));
134 EXPECT_FALSE(m_resource->cachedMetadata(cacheTagCode)); 122 EXPECT_FALSE(m_resource->cachedMetadata(tagForCodeCache()));
135 } 123 }
136 124
137 TEST_F(V8ScriptRunnerTest, parseOptions) 125 TEST_F(V8ScriptRunnerTest, parseOptions)
138 { 126 {
139 setResource(); 127 setResource();
140 EXPECT_TRUE(compileScript(V8CacheOptionsParse)); 128 EXPECT_TRUE(compileScript(V8CacheOptionsParse));
141 EXPECT_TRUE(m_resource->cachedMetadata(cacheTagParser)); 129 EXPECT_TRUE(m_resource->cachedMetadata(tagForParserCache()));
142 EXPECT_FALSE(m_resource->cachedMetadata(cacheTagCode)); 130 EXPECT_FALSE(m_resource->cachedMetadata(tagForCodeCache()));
143 } 131 }
144 132
145 TEST_F(V8ScriptRunnerTest, codeOptions) 133 TEST_F(V8ScriptRunnerTest, codeOptions)
146 { 134 {
147 setResource(); 135 setResource();
148 EXPECT_TRUE(compileScript(V8CacheOptionsCode)); 136 EXPECT_TRUE(compileScript(V8CacheOptionsCode));
149 EXPECT_FALSE(m_resource->cachedMetadata(cacheTagParser)); 137 EXPECT_FALSE(m_resource->cachedMetadata(tagForParserCache()));
150 138
151 // TODO(vogelheim): Code caching is presently still disabled. 139 // FIXME: Code caching is presently still disabled.
152 // Enable EXPECT when code caching lands. 140 // Enable EXPECT when code caching lands.
153 // EXPECT_TRUE(m_resource->cachedMetadata(cacheTagCode)); 141 // EXPECT_TRUE(m_resource->cachedMetadata(tagForCodeCache()));
154 } 142 }
155 143
156 } // namespace 144 } // namespace
157 145
158 } // namespace blink 146 } // namespace blink
OLDNEW
« no previous file with comments | « Source/bindings/core/v8/V8ScriptRunner.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698