1c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch// Copyright 2013 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch#include "content/shell/renderer/gc_extension.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "v8/include/v8.h"
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kGCExtensionName[] = "v8/GCController";
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace extensions_v8 {
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)v8::Extension* GCExtension::Get() {
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  v8::Extension* extension = new v8::Extension(
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      kGCExtensionName,
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "(function () {"
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "   var v8_gc;"
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "   if (gc) v8_gc = gc;"
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "   GCController = new Object();"
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "   GCController.collect ="
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "     function() {if (v8_gc) v8_gc(); };"
23a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)      "   GCController.minorCollect ="
24a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)      "     function() {if (v8_gc) v8_gc(true); };"
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      " })();");
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return extension;
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace extensions_v8
30