Commit 330bc47b authored by miket@chromium.org's avatar miket@chromium.org

Stop copying extension bindings scripts.

After improving v8 API to allow us to pass in an extension source string
length field, use that to refer directly to the in-image source rather
than copying it and holding it in memory, thus saving memory.

It bums me out that I have to call GetRawDataResource() twice, but I don't s
a way around that without abandoning inheritance from v8::Extension and
switching to composition/delegation.

Moved DEPS for v8 to r9534, the newest to include r9365. I don't know whethe
this matches our convention; perhaps we always move DEPS to the latest.

BUG=95147
TEST=relying on existing extensions unit tests, which all still pass.


Review URL: http://codereview.chromium.org/8277020

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@110197 0039d316-1c4b-4281-b951-d872f2087c98
parent a50ece7d
...@@ -31,9 +31,6 @@ const char kChromeHidden[] = "chromeHidden"; ...@@ -31,9 +31,6 @@ const char kChromeHidden[] = "chromeHidden";
const char kValidateCallbacks[] = "validateCallbacks"; const char kValidateCallbacks[] = "validateCallbacks";
#endif #endif
typedef std::map<int, std::string> StringMap;
static base::LazyInstance<StringMap> g_string_map = LAZY_INSTANCE_INITIALIZER;
static base::LazyInstance<ChromeV8Extension::InstanceSet> g_instances = static base::LazyInstance<ChromeV8Extension::InstanceSet> g_instances =
LAZY_INSTANCE_INITIALIZER; LAZY_INSTANCE_INITIALIZER;
...@@ -41,16 +38,8 @@ static base::LazyInstance<ChromeV8Extension::InstanceSet> g_instances = ...@@ -41,16 +38,8 @@ static base::LazyInstance<ChromeV8Extension::InstanceSet> g_instances =
// static // static
const char* ChromeV8Extension::GetStringResource(int resource_id) { base::StringPiece ChromeV8Extension::GetStringResource(int resource_id) {
StringMap* strings = g_string_map.Pointer(); return ResourceBundle::GetSharedInstance().GetRawDataResource(resource_id);
StringMap::iterator it = strings->find(resource_id);
if (it == strings->end()) {
it = strings->insert(std::make_pair(
resource_id,
ResourceBundle::GetSharedInstance().GetRawDataResource(
resource_id).as_string())).first;
}
return it->second.c_str();
} }
// static // static
...@@ -72,9 +61,10 @@ content::RenderView* ChromeV8Extension::GetCurrentRenderView() { ...@@ -72,9 +61,10 @@ content::RenderView* ChromeV8Extension::GetCurrentRenderView() {
ChromeV8Extension::ChromeV8Extension(const char* name, int resource_id, ChromeV8Extension::ChromeV8Extension(const char* name, int resource_id,
ExtensionDispatcher* extension_dispatcher) ExtensionDispatcher* extension_dispatcher)
: v8::Extension(name, : v8::Extension(name,
GetStringResource(resource_id), GetStringResource(resource_id).data(),
0, // num dependencies 0, // num dependencies
NULL), // dependencies array NULL, // dependencies array
GetStringResource(resource_id).size()), // source length
extension_dispatcher_(extension_dispatcher) { extension_dispatcher_(extension_dispatcher) {
g_instances.Get().insert(this); g_instances.Get().insert(this);
} }
...@@ -84,9 +74,10 @@ ChromeV8Extension::ChromeV8Extension(const char* name, int resource_id, ...@@ -84,9 +74,10 @@ ChromeV8Extension::ChromeV8Extension(const char* name, int resource_id,
const char** dependencies, const char** dependencies,
ExtensionDispatcher* extension_dispatcher) ExtensionDispatcher* extension_dispatcher)
: v8::Extension(name, : v8::Extension(name,
GetStringResource(resource_id), GetStringResource(resource_id).data(),
dependency_count, dependency_count,
dependencies), dependencies,
GetStringResource(resource_id).size()),
extension_dispatcher_(extension_dispatcher) { extension_dispatcher_(extension_dispatcher) {
g_instances.Get().insert(this); g_instances.Get().insert(this);
} }
......
...@@ -93,7 +93,7 @@ class ChromeV8Extension : public v8::Extension { ...@@ -93,7 +93,7 @@ class ChromeV8Extension : public v8::Extension {
ExtensionDispatcher* extension_dispatcher_; ExtensionDispatcher* extension_dispatcher_;
private: private:
static const char* GetStringResource(int resource_id); static base::StringPiece GetStringResource(int resource_id);
// Helper to print from bindings javascript. // Helper to print from bindings javascript.
static v8::Handle<v8::Value> Print(const v8::Arguments& args); static v8::Handle<v8::Value> Print(const v8::Arguments& args);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment