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

Unified Diff: runtime/vm/dart_api_impl.cc

Issue 187113003: Track external allocated memory for weak persistent handles. (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
Index: runtime/vm/dart_api_impl.cc
===================================================================
--- runtime/vm/dart_api_impl.cc (revision 33396)
+++ runtime/vm/dart_api_impl.cc (working copy)
@@ -623,6 +623,7 @@
Dart_Handle object,
bool is_prologue,
void* peer,
+ intptr_t external_allocation_size,
Dart_WeakPersistentHandleFinalizer callback) {
ApiState* state = isolate->api_state();
ASSERT(state != NULL);
@@ -636,6 +637,7 @@
finalizable_ref->set_raw(ref);
finalizable_ref->set_peer(peer);
finalizable_ref->set_callback(callback);
+ finalizable_ref->SetExternalSize(external_allocation_size, isolate);
if (is_prologue) {
return finalizable_ref->apiPrologueHandle();
} else {
@@ -647,6 +649,7 @@
DART_EXPORT Dart_WeakPersistentHandle Dart_NewWeakPersistentHandle(
Dart_Handle object,
void* peer,
+ intptr_t external_allocation_size,
Dart_WeakPersistentHandleFinalizer callback) {
Isolate* isolate = Isolate::Current();
CHECK_ISOLATE(isolate);
@@ -654,6 +657,7 @@
object,
false,
peer,
+ external_allocation_size,
callback);
}
@@ -661,6 +665,7 @@
DART_EXPORT Dart_WeakPersistentHandle Dart_NewPrologueWeakPersistentHandle(
Dart_Handle object,
void* peer,
+ intptr_t external_allocation_size,
Dart_WeakPersistentHandleFinalizer callback) {
Isolate* isolate = Isolate::Current();
CHECK_ISOLATE(isolate);
@@ -668,6 +673,7 @@
object,
true,
peer,
+ external_allocation_size,
callback);
}
@@ -697,11 +703,13 @@
ASSERT(state->IsValidPrologueWeakPersistentHandle(object));
FinalizablePersistentHandle* weak_ref =
FinalizablePersistentHandle::Cast(object);
+ weak_ref->EnsureFreeExternal(isolate);
state->prologue_weak_persistent_handles().FreeHandle(weak_ref);
} else {
ASSERT(!state->IsValidPrologueWeakPersistentHandle(object));
FinalizablePersistentHandle* weak_ref =
FinalizablePersistentHandle::Cast(object);
+ weak_ref->EnsureFreeExternal(isolate);
state->weak_persistent_handles().FreeHandle(weak_ref);
}
}

Powered by Google App Engine
This is Rietveld 408576698