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

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

Issue 528013002: Restore in-memory parser cache for V8 compile. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: bool -> enum. 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
OLDNEW
(Empty)
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
3 // found in the LICENSE file.
4
5 #include "config.h"
6 #include "bindings/core/v8/V8ScriptRunner.h"
7
8 #include "core/fetch/ScriptResource.h"
9 #include <gtest/gtest.h>
10 #include <v8.h>
11
12 namespace blink {
13
14 namespace {
15
16 class V8ScriptRunnerTest : public ::testing::Test {
17 public:
18 V8ScriptRunnerTest() { }
19 virtual ~V8ScriptRunnerTest() { }
20
21 static void SetUpTestCase()
22 {
23 cacheTagParser = StringHash::hash(v8::V8::GetVersion()) * 2;
haraken 2014/09/05 16:16:13 It is error-prone to calculate the tag value in ea
vogelheim 2014/09/05 17:47:29 Not sure what you mean: Helper methods in the test
haraken 2014/09/05 17:49:39 I was suggesting to add a helper function to V8Scr
vogelheim 2014/09/05 17:58:43 Hmm. I'm not convinced that's a good path since 1,
24 cacheTagCode = cacheTagParser + 1;
25 }
26
27 virtual void SetUp() OVERRIDE
28 {
29 // To trick various layers of caching, increment a counter for each
30 // test and use it in code(), fielname() and url().
31 counter++;
32 }
33
34 virtual void TearDown() OVERRIDE
35 {
36 m_resourceRequest.clear();
37 m_resource.clear();
38 }
39
40 v8::Isolate* isolate()
haraken 2014/09/05 16:16:13 You should use V8TestingScope. See how it's used i
vogelheim 2014/09/05 17:47:29 Done.
41 {
42 return v8::Isolate::GetCurrent();
43 }
44 v8::Local<v8::String> v8String(const char* value)
haraken 2014/09/05 16:16:13 Can't you use a helper method in V8Binding.h?
vogelheim 2014/09/05 17:47:29 Done.
45 {
46 return v8::String::NewFromOneByte(
47 isolate(), reinterpret_cast<const uint8_t*>(value));
48 }
49 v8::Local<v8::String> v8String(const WTF::String& value)
haraken 2014/09/05 16:16:13 Ditto.
vogelheim 2014/09/05 17:47:29 Done.
50 {
51 return v8String(value.ascii().data());
52 }
53 WTF::String code()
54 {
55 // Simple function for testing. Note:
56 // - Add counter to trick V8 code cache.
57 // - Pad counter to 1000 digits, to trick minimal cacheability threshold .
58 return WTF::String::format("a = function() { 1 + 1; } // %01000d\n", cou nter);
59 }
60 WTF::String filename()
61 {
62 return WTF::String::format("whatever%d.js", counter);
63 }
64 WTF::String url()
65 {
66 return WTF::String::format("http://bla.com/bla%d", counter);
67 }
68
69 bool compileScript(V8CacheOptions cacheOptions)
70 {
71 v8::HandleScope handleScope(isolate());
72 v8::Local<v8::Context> context = v8::Context::New(isolate());
73 v8::Context::Scope contextScope(context);
haraken 2014/09/05 16:16:13 You can avoid these by using V8TestingScope.
vogelheim 2014/09/05 17:47:29 Done.
74 return !V8ScriptRunner::compileScript(
75 v8String(code()), filename(), WTF::TextPosition(), m_resource.get(),
76 isolate(), NotSharableCrossOrigin, cacheOptions)
77 .IsEmpty();
78 }
79
80 void setEmptyResource()
81 {
82 m_resourceRequest = WTF::adoptPtr(new ResourceRequest);
83 m_resource = WTF::adoptPtr(new ScriptResource(*m_resourceRequest.get(), "text/utf-8"));
84 }
85
86 void setResource()
87 {
88 m_resourceRequest = WTF::adoptPtr(new ResourceRequest(url()));
89 m_resource = WTF::adoptPtr(new ScriptResource(*m_resourceRequest.get(), "text/utf-8"));
90 }
91
92 protected:
haraken 2014/09/05 16:16:13 This should be private.
vogelheim 2014/09/05 17:47:29 No, it should be protected, so that the helper cla
93 WTF::OwnPtr<ResourceRequest> m_resourceRequest;
94 WTF::OwnPtr<ScriptResource> m_resource;
95
96 static unsigned cacheTagParser;
97 static unsigned cacheTagCode;
98 static int counter;
99 };
100
101 unsigned V8ScriptRunnerTest::cacheTagParser = 0;
102 unsigned V8ScriptRunnerTest::cacheTagCode = 0;
103 int V8ScriptRunnerTest::counter = 0;
104
105 TEST_F(V8ScriptRunnerTest, resourcelessShouldPass)
106 {
107 EXPECT_TRUE(compileScript(V8CacheOptionsOff));
108 EXPECT_TRUE(compileScript(V8CacheOptionsParse));
109 EXPECT_TRUE(compileScript(V8CacheOptionsCode));
110 }
111
112 TEST_F(V8ScriptRunnerTest, emptyResourceDoesNothing)
113 {
114 setEmptyResource();
115 EXPECT_TRUE(compileScript(V8CacheOptionsOff));
116 EXPECT_FALSE(m_resource->cachedMetadata(cacheTagParser));
117 EXPECT_FALSE(m_resource->cachedMetadata(cacheTagCode));
118
119 EXPECT_TRUE(compileScript(V8CacheOptionsParse));
120 EXPECT_FALSE(m_resource->cachedMetadata(cacheTagParser));
121 EXPECT_FALSE(m_resource->cachedMetadata(cacheTagCode));
122
123 EXPECT_TRUE(compileScript(V8CacheOptionsCode));
124 EXPECT_FALSE(m_resource->cachedMetadata(cacheTagParser));
125 EXPECT_FALSE(m_resource->cachedMetadata(cacheTagCode));
126 }
127
128 TEST_F(V8ScriptRunnerTest, defaultOptions)
129 {
130 setResource();
131 EXPECT_TRUE(compileScript(V8CacheOptionsOff));
132 EXPECT_TRUE(m_resource->cachedMetadata(cacheTagParser));
133 EXPECT_FALSE(m_resource->cachedMetadata(cacheTagCode));
134 }
135
136 TEST_F(V8ScriptRunnerTest, parseOptions)
137 {
138 setResource();
139 EXPECT_TRUE(compileScript(V8CacheOptionsParse));
140 EXPECT_TRUE(m_resource->cachedMetadata(cacheTagParser));
141 EXPECT_FALSE(m_resource->cachedMetadata(cacheTagCode));
142 }
143
144 TEST_F(V8ScriptRunnerTest, codeOptions)
145 {
146 setResource();
147 EXPECT_TRUE(compileScript(V8CacheOptionsCode));
148 EXPECT_FALSE(m_resource->cachedMetadata(cacheTagParser));
149
150 // TODO(vogelheim): Code caching is presently still disabled.
haraken 2014/09/05 16:16:13 TODO(vogelheim) => FIXME
vogelheim 2014/09/05 17:47:29 Done.
151 // Enable EXPECT when code caching lands.
152 // EXPECT_TRUE(m_resource->cachedMetadata(cacheTagCode));
153 }
154
155 } // namespace
156
157 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698