From: yangguo@chromium.org Date: Fri, 3 Aug 2012 14:03:30 +0000 (+0000) Subject: Fix crash bug when calling getV8Statistics(). X-Git-Tag: upstream/4.7.83~16193 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=0a0b4f4f2f0b813539673da9e2f8276e97ddbc8d;p=platform%2Fupstream%2Fv8.git Fix crash bug when calling getV8Statistics(). BUG=v8:2270 Review URL: https://chromiumcodereview.appspot.com/10830160 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@12255 ce2b1a6d-e550-0410-aec6-3dcde31c8c00 --- diff --git a/src/extensions/statistics-extension.cc b/src/extensions/statistics-extension.cc index cb34737..ac986f4 100644 --- a/src/extensions/statistics-extension.cc +++ b/src/extensions/statistics-extension.cc @@ -41,10 +41,21 @@ v8::Handle StatisticsExtension::GetNativeFunction( } +static void AddProperty(v8::Local object, + StatsCounter* counter, + const char* name) { + if (counter->Enabled()) { + object->Set(v8::String::New(name), + v8::Number::New(*counter->GetInternalPointer())); + } +} + + v8::Handle StatisticsExtension::GetCounters( const v8::Arguments& args) { Isolate* isolate = Isolate::Current(); Heap* heap = isolate->heap(); + if (args.Length() > 0) { // GC if first argument evaluates to true. if (args[0]->IsBoolean() && args[0]->ToBoolean()->Value()) { heap->CollectAllGarbage(Heap::kNoGCFlags, "counters extension"); @@ -54,46 +65,31 @@ v8::Handle StatisticsExtension::GetCounters( Counters* counters = isolate->counters(); v8::Local result = v8::Object::New(); - StatsCounter* counter = NULL; - #define ADD_COUNTER(name, caption) \ - counter = counters->name(); \ - if (counter->Enabled()) \ - result->Set(v8::String::New(#name), \ - v8::Number::New(*counter->GetInternalPointer())); + AddProperty(result, counters->name(), #name); STATS_COUNTER_LIST_1(ADD_COUNTER) STATS_COUNTER_LIST_2(ADD_COUNTER) #undef ADD_COUNTER #define ADD_COUNTER(name) \ - counter = counters->count_of_##name(); \ - if (counter->Enabled()) \ - result->Set(v8::String::New("count_of_" #name), \ - v8::Number::New(*counter->GetInternalPointer())); \ - counter = counters->size_of_##name(); \ - if (counter->Enabled()) \ - result->Set(v8::String::New("size_of_" #name), \ - v8::Number::New(*counter->GetInternalPointer())); + AddProperty(result, counters->count_of_##name(), "count_of_" #name); \ + AddProperty(result, counters->size_of_##name(), "size_of_" #name); INSTANCE_TYPE_LIST(ADD_COUNTER) #undef ADD_COUNTER #define ADD_COUNTER(name) \ - result->Set(v8::String::New("count_of_CODE_TYPE_" #name), \ - v8::Number::New( \ - *counters->count_of_CODE_TYPE_##name()->GetInternalPointer())); \ - result->Set(v8::String::New("size_of_CODE_TYPE_" #name), \ - v8::Number::New( \ - *counters->size_of_CODE_TYPE_##name()->GetInternalPointer())); + AddProperty(result, counters->count_of_CODE_TYPE_##name(), \ + "count_of_CODE_TYPE_" #name); \ + AddProperty(result, counters->size_of_CODE_TYPE_##name(), \ + "size_of_CODE_TYPE_" #name); CODE_KIND_LIST(ADD_COUNTER) #undef ADD_COUNTER #define ADD_COUNTER(name) \ - result->Set(v8::String::New("count_of_FIXED_ARRAY_" #name), \ - v8::Number::New( \ - *counters->count_of_FIXED_ARRAY_##name()->GetInternalPointer())); \ - result->Set(v8::String::New("size_of_FIXED_ARRAY_" #name), \ - v8::Number::New( \ - *counters->size_of_FIXED_ARRAY_##name()->GetInternalPointer())); + AddProperty(result, counters->count_of_FIXED_ARRAY_##name(), \ + "count_of_FIXED_ARRAY_" #name); \ + AddProperty(result, counters->size_of_FIXED_ARRAY_##name(), \ + "size_of_FIXED_ARRAY_" #name); FIXED_ARRAY_SUB_INSTANCE_TYPE_LIST(ADD_COUNTER) #undef ADD_COUNTER