Reviewers: Igor Sheludko,

Description:
Reland: Add a use counter for Intl.v8BreakIterator

This relands https://codereview.chromium.org/619913002/
The test has been fixed to do a GC so it does not appear to leak in
ASAN.  In addition the test has been fixed to work in the no-i18n
build, by incorporating the change from
https://codereview.chromium.org/631743002/
[email protected]
BUG=

Please review this at https://codereview.chromium.org/628223002/

SVN Base: https://v8.googlecode.com/svn/branches/bleeding_edge

Affected files (+39, -0 lines):
  M include/v8.h
  M src/i18n.cc
  M test/cctest/test-strings.cc


Index: include/v8.h
diff --git a/include/v8.h b/include/v8.h
index 2dc1bd81af8ce5bbd2a8ac0ed30f5f00eefc79b2..7a1c479cc427d69abeecd1e235f2e979e1859e3c 100644
--- a/include/v8.h
+++ b/include/v8.h
@@ -4528,6 +4528,7 @@ class V8_EXPORT Isolate {
    */
   enum UseCounterFeature {
     kUseAsm = 0,
+    kBreakIterator = 1,
     kUseCounterFeatureCount  // This enum value must be last.
   };

Index: src/i18n.cc
diff --git a/src/i18n.cc b/src/i18n.cc
index cae3a327a1b924b60edad2d9f326ccd01df2b6ad..ba44687aa90dd57932cc36f4feb3986004dac856 100644
--- a/src/i18n.cc
+++ b/src/i18n.cc
@@ -631,6 +631,8 @@ icu::BreakIterator* CreateICUBreakIterator(
     return NULL;
   }

+  isolate->CountUsage(v8::Isolate::UseCounterFeature::kBreakIterator);
+
   return break_iterator;
 }

Index: test/cctest/test-strings.cc
diff --git a/test/cctest/test-strings.cc b/test/cctest/test-strings.cc
index ef13c4dadf682f6e178dce71c9e70009d703a7e9..c0b2cbf3caf934f920da34df7f98a5cbf48c5023 100644
--- a/test/cctest/test-strings.cc
+++ b/test/cctest/test-strings.cc
@@ -1292,6 +1292,42 @@ TEST(RobustSubStringStub) {
 }


+namespace {
+
+int* global_use_counts = NULL;
+
+void MockUseCounterCallback(v8::Isolate* isolate,
+                            v8::Isolate::UseCounterFeature feature) {
+  ++global_use_counts[feature];
+}
+}
+
+
+TEST(CountBreakIterator) {
+  CcTest::InitializeVM();
+  v8::HandleScope scope(CcTest::isolate());
+  LocalContext context;
+  int use_counts[v8::Isolate::kUseCounterFeatureCount] = {};
+  global_use_counts = use_counts;
+  CcTest::isolate()->SetUseCounterCallback(MockUseCounterCallback);
+  CHECK_EQ(0, use_counts[v8::Isolate::kBreakIterator]);
+  v8::Local<v8::Value> result = CompileRun(
+      "(function() {"
+      "  if (!this.Intl) return 0;"
+      "  var iterator = Intl.v8BreakIterator(['en']);"
+      "  iterator.adoptText('Now is the time');"
+      "  iterator.next();"
+      "  return iterator.next();"
+      "})();");
+  CHECK(result->IsNumber());
+  int uses = result->ToInt32()->Value() == 0 ? 0 : 1;
+  CHECK_EQ(uses, use_counts[v8::Isolate::kBreakIterator]);
+ // Make sure GC cleans up the break iterator, so we don't get a memory leak
+  // reported by ASAN.
+  CcTest::isolate()->LowMemoryNotification();
+}
+
+
 TEST(StringReplaceAtomTwoByteResult) {
   CcTest::InitializeVM();
   v8::HandleScope scope(CcTest::isolate());


--
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev
--- You received this message because you are subscribed to the Google Groups "v8-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to