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

Unified Diff: runtime/vm/dart_api_impl_test.cc

Issue 197963002: Remove the ability to allow multiple gc prologue and gc epilogue callbacks (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 6 years, 9 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « runtime/vm/dart_api_impl.cc ('k') | runtime/vm/gc_callbacks.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/vm/dart_api_impl_test.cc
===================================================================
--- runtime/vm/dart_api_impl_test.cc (revision 33620)
+++ runtime/vm/dart_api_impl_test.cc (working copy)
@@ -2870,6 +2870,10 @@
static int global_epilogue_callback_status;
+static void EpilogueCallbackNOP() {
+}
+
+
static void EpilogueCallbackTimes4() {
global_epilogue_callback_status *= 4;
}
@@ -2881,33 +2885,33 @@
TEST_CASE(AddGarbageCollectionCallbacks) {
+ // Prologue callback addition testing.
+
// Add a prologue callback.
EXPECT_VALID(Dart_AddGcPrologueCallback(&PrologueCallbackTimes2));
// Add the same prologue callback again. This is an error.
EXPECT(Dart_IsError(Dart_AddGcPrologueCallback(&PrologueCallbackTimes2)));
- // Add another prologue callback.
- EXPECT_VALID(Dart_AddGcPrologueCallback(&PrologueCallbackTimes3));
-
- // Add the same prologue callback again. This is an error.
+ // Add another prologue callback. This is an error.
EXPECT(Dart_IsError(Dart_AddGcPrologueCallback(&PrologueCallbackTimes3)));
+ // Epilogue callback addition testing.
+
// Add an epilogue callback.
EXPECT_VALID(Dart_AddGcEpilogueCallback(&EpilogueCallbackTimes4));
// Add the same epilogue callback again. This is an error.
EXPECT(Dart_IsError(Dart_AddGcEpilogueCallback(&EpilogueCallbackTimes4)));
- // Add annother epilogue callback.
- EXPECT_VALID(Dart_AddGcEpilogueCallback(&EpilogueCallbackTimes5));
-
- // Add the same epilogue callback again. This is an error.
+ // Add annother epilogue callback. This is an error.
EXPECT(Dart_IsError(Dart_AddGcEpilogueCallback(&EpilogueCallbackTimes5)));
}
TEST_CASE(RemoveGarbageCollectionCallbacks) {
+ // Prologue callback removal testing.
+
// Remove a prologue callback that has not been added. This is an error.
EXPECT(Dart_IsError(Dart_RemoveGcPrologueCallback(&PrologueCallbackTimes2)));
@@ -2920,47 +2924,68 @@
// Remove a prologue callback again. This is an error.
EXPECT(Dart_IsError(Dart_RemoveGcPrologueCallback(&PrologueCallbackTimes2)));
- // Add two prologue callbacks.
+ // Add a prologue callback.
EXPECT_VALID(Dart_AddGcPrologueCallback(&PrologueCallbackTimes2));
- EXPECT_VALID(Dart_AddGcPrologueCallback(&PrologueCallbackTimes3));
- // Remove two prologue callbacks.
- EXPECT_VALID(Dart_RemoveGcPrologueCallback(&PrologueCallbackTimes3));
- EXPECT_VALID(Dart_RemoveGcPrologueCallback(&PrologueCallbackTimes2));
+ // Remove a prolog callback that was not added. This is an error.
+ EXPECT(Dart_IsError(Dart_RemoveGcPrologueCallback(&PrologueCallbackTimes3)));
- // Remove epilogue callbacks again. This is an error.
+ // Epilogue callback removal testing.
+
+ // Remove epilogue callback that was not added. This is an error.
EXPECT(Dart_IsError(Dart_RemoveGcEpilogueCallback(&EpilogueCallbackTimes4)));
- EXPECT(Dart_IsError(Dart_RemoveGcEpilogueCallback(&EpilogueCallbackTimes5)));
- // Remove a epilogue callback that has not been added. This is an error.
- EXPECT(Dart_IsError(Dart_RemoveGcEpilogueCallback(&EpilogueCallbackTimes5)));
-
- // Add a epilogue callback.
+ // Add an epilogue callback.
EXPECT_VALID(Dart_AddGcEpilogueCallback(&EpilogueCallbackTimes4));
- // Remove a epilogue callback.
+ // Remove an epilogue callback.
EXPECT_VALID(Dart_RemoveGcEpilogueCallback(&EpilogueCallbackTimes4));
- // Remove a epilogue callback again. This is an error.
+ // Remove an epilogue callback again. This is an error.
EXPECT(Dart_IsError(Dart_RemoveGcEpilogueCallback(&EpilogueCallbackTimes4)));
- // Add two epilogue callbacks.
+ // Add an epilogue callbacks.
EXPECT_VALID(Dart_AddGcEpilogueCallback(&EpilogueCallbackTimes4));
- EXPECT_VALID(Dart_AddGcEpilogueCallback(&EpilogueCallbackTimes5));
- // Remove two epilogue callbacks.
- EXPECT_VALID(Dart_RemoveGcEpilogueCallback(&EpilogueCallbackTimes5));
- EXPECT_VALID(Dart_RemoveGcEpilogueCallback(&EpilogueCallbackTimes4));
-
- // Remove epilogue callbacks again. This is an error.
- EXPECT(Dart_IsError(Dart_RemoveGcEpilogueCallback(&EpilogueCallbackTimes4)));
+ // Remove an epilogue callback that was not added. This is an error.
EXPECT(Dart_IsError(Dart_RemoveGcEpilogueCallback(&EpilogueCallbackTimes5)));
}
+TEST_CASE(SetGarbageCollectionCallbacks) {
+ // GC callback addition testing.
+
+ // Add GC callbacks.
+ EXPECT_VALID(Dart_SetGcCallbacks(&PrologueCallbackTimes2,
+ &EpilogueCallbackTimes4));
+
+ // Add the same callbacks again. This is an error.
+ EXPECT(Dart_IsError(Dart_SetGcCallbacks(&PrologueCallbackTimes2,
+ &EpilogueCallbackTimes4)));
+
+ // Add another callback. This is an error.
+ EXPECT(Dart_IsError(Dart_SetGcCallbacks(&PrologueCallbackTimes3,
+ &EpilogueCallbackTimes5)));
+
+ // GC callback removal testing.
+
+ // Remove GC callbacks.
+ EXPECT_VALID(Dart_SetGcCallbacks(NULL, NULL));
+
+ // Remove GC callbacks whennone exist. This is an error.
+ EXPECT(Dart_IsError(Dart_SetGcCallbacks(NULL, NULL)));
+
+ EXPECT_VALID(Dart_SetGcCallbacks(&PrologueCallbackTimes2,
+ &EpilogueCallbackTimes4));
+ EXPECT(Dart_IsError(Dart_SetGcCallbacks(&PrologueCallbackTimes2, NULL)));
+ EXPECT(Dart_IsError(Dart_SetGcCallbacks(NULL, &EpilogueCallbackTimes4)));
+}
+
+
TEST_CASE(SingleGarbageCollectionCallback) {
// Add a prologue callback.
- EXPECT_VALID(Dart_AddGcPrologueCallback(&PrologueCallbackTimes2));
+ EXPECT_VALID(Dart_SetGcCallbacks(&PrologueCallbackTimes2,
+ &EpilogueCallbackNOP));
// Garbage collect new space ignoring callbacks. This should not
// invoke the prologue callback. No status values should change.
@@ -3002,7 +3027,9 @@
EXPECT_EQ(7, global_epilogue_callback_status);
// Add an epilogue callback.
- EXPECT_VALID(Dart_AddGcEpilogueCallback(&EpilogueCallbackTimes4));
+ EXPECT_VALID(Dart_SetGcCallbacks(NULL, NULL));
+ EXPECT_VALID(Dart_SetGcCallbacks(&PrologueCallbackTimes2,
+ &EpilogueCallbackTimes4));
// Garbage collect new space. This should not invoke the prologue
// or the epilogue callback. No status values should change.
@@ -3054,90 +3081,7 @@
EXPECT_EQ(7, global_epilogue_callback_status);
}
-TEST_CASE(MultipleGarbageCollectionCallbacks) {
- // Add prologue callbacks.
- EXPECT_VALID(Dart_AddGcPrologueCallback(&PrologueCallbackTimes2));
- EXPECT_VALID(Dart_AddGcPrologueCallback(&PrologueCallbackTimes3));
- // Add an epilogue callback.
- EXPECT_VALID(Dart_AddGcEpilogueCallback(&EpilogueCallbackTimes4));
-
- // Garbage collect new space. This should not invoke the prologue
- // or epilogue callbacks. No status values should change.
- global_prologue_callback_status = 3;
- global_epilogue_callback_status = 7;
- GCTestHelper::CollectNewSpace(Heap::kIgnoreApiCallbacks);
- EXPECT_EQ(3, global_prologue_callback_status);
- EXPECT_EQ(7, global_epilogue_callback_status);
-
- // Garbage collect old space. This should invoke both prologue
- // callbacks and the epilogue callback. The prologue and epilogue
- // status values should change.
- global_prologue_callback_status = 3;
- global_epilogue_callback_status = 7;
- Isolate::Current()->heap()->CollectGarbage(Heap::kOld);
- EXPECT_EQ(18, global_prologue_callback_status);
- EXPECT_EQ(28, global_epilogue_callback_status);
-
- // Add another GC epilogue callback.
- EXPECT_VALID(Dart_AddGcEpilogueCallback(&EpilogueCallbackTimes5));
-
- // Garbage collect old space. This should invoke both prologue
- // callbacks and both epilogue callbacks. The prologue and epilogue
- // status values should change.
- global_prologue_callback_status = 3;
- global_epilogue_callback_status = 7;
- Isolate::Current()->heap()->CollectGarbage(Heap::kOld);
- EXPECT_EQ(18, global_prologue_callback_status);
- EXPECT_EQ(140, global_epilogue_callback_status);
-
- // Remove an epilogue callback.
- EXPECT_VALID(Dart_RemoveGcEpilogueCallback(&EpilogueCallbackTimes4));
-
- // Garbage collect old space. This should invoke both prologue
- // callbacks and the remaining epilogue callback. The prologue and
- // epilogue status values should change.
- global_prologue_callback_status = 3;
- global_epilogue_callback_status = 7;
- Isolate::Current()->heap()->CollectGarbage(Heap::kOld);
- EXPECT_EQ(18, global_prologue_callback_status);
- EXPECT_EQ(35, global_epilogue_callback_status);
-
- // Remove the remaining epilogue callback.
- EXPECT_VALID(Dart_RemoveGcEpilogueCallback(&EpilogueCallbackTimes5));
-
- // Garbage collect old space. This should invoke both prologue
- // callbacks. The prologue status value should change.
- global_prologue_callback_status = 3;
- global_epilogue_callback_status = 7;
- Isolate::Current()->heap()->CollectGarbage(Heap::kOld);
- EXPECT_EQ(18, global_prologue_callback_status);
- EXPECT_EQ(7, global_epilogue_callback_status);
-
- // Remove a prologue callback.
- EXPECT_VALID(Dart_RemoveGcPrologueCallback(&PrologueCallbackTimes3));
-
- // Garbage collect old space. This should invoke the remaining
- // prologue callback. The prologue status value should change.
- global_prologue_callback_status = 3;
- global_epilogue_callback_status = 7;
- Isolate::Current()->heap()->CollectGarbage(Heap::kOld);
- EXPECT_EQ(6, global_prologue_callback_status);
- EXPECT_EQ(7, global_epilogue_callback_status);
-
- // Remove the remaining prologue callback.
- EXPECT_VALID(Dart_RemoveGcPrologueCallback(&PrologueCallbackTimes2));
-
- // Garbage collect old space. No callbacks should be invoked. No
- // status values should change.
- global_prologue_callback_status = 3;
- global_epilogue_callback_status = 7;
- Isolate::Current()->heap()->CollectGarbage(Heap::kOld);
- EXPECT_EQ(3, global_prologue_callback_status);
- EXPECT_EQ(7, global_epilogue_callback_status);
-}
-
-
// Unit test for creating multiple scopes and local handles within them.
// Ensure that the local handles get all cleaned out when exiting the
// scope.
« no previous file with comments | « runtime/vm/dart_api_impl.cc ('k') | runtime/vm/gc_callbacks.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698