Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2011, Google Inc. | 1 // Copyright 2011, Google Inc. |
| 2 // All rights reserved. | 2 // All rights reserved. |
| 3 // | 3 // |
| 4 // Redistribution and use in source and binary forms, with or without | 4 // Redistribution and use in source and binary forms, with or without |
| 5 // modification, are permitted provided that the following conditions are | 5 // modification, are permitted provided that the following conditions are |
| 6 // met: | 6 // met: |
| 7 // | 7 // |
| 8 // * Redistributions of source code must retain the above copyright | 8 // * Redistributions of source code must retain the above copyright |
| 9 // notice, this list of conditions and the following disclaimer. | 9 // notice, this list of conditions and the following disclaimer. |
| 10 // * Redistributions in binary form must reproduce the above | 10 // * Redistributions in binary form must reproduce the above |
| (...skipping 244 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 255 | 255 |
| 256 static DartDOMData* domDataForIsolate(Dart_Isolate isolate) | 256 static DartDOMData* domDataForIsolate(Dart_Isolate isolate) |
| 257 { | 257 { |
| 258 IsolateToDartDOMDataMap::iterator it = isolateToDartDOMDataMap().find(isolat e); | 258 IsolateToDartDOMDataMap::iterator it = isolateToDartDOMDataMap().find(isolat e); |
| 259 ASSERT(it != isolateToDartDOMDataMap().end()); | 259 ASSERT(it != isolateToDartDOMDataMap().end()); |
| 260 return it->second; | 260 return it->second; |
| 261 } | 261 } |
| 262 | 262 |
| 263 static DartDOMData* currentDOMData() | 263 static DartDOMData* currentDOMData() |
| 264 { | 264 { |
| 265 return domDataForIsolate(DartIsolate::current()->isolate()); | 265 return domDataForIsolate(Dart_CurrentIsolate()); |
| 266 } | 266 } |
| 267 | 267 |
| 268 void DartUtilities::registerDOMIsolate(Dart_Isolate isolate, PassRefPtr<DartAppl icationLoader> applicationLoader, ScriptExecutionContext* context) | 268 void DartUtilities::registerDOMIsolate(Dart_Isolate isolate, PassRefPtr<DartAppl icationLoader> applicationLoader, ScriptExecutionContext* context) |
| 269 { | 269 { |
| 270 ASSERT(!isolateToDartDOMDataMap().contains(isolate)); | 270 ASSERT(!isolateToDartDOMDataMap().contains(isolate)); |
| 271 isolateToDartDOMDataMap().set(isolate, new DartDOMData(applicationLoader, co ntext)); | 271 isolateToDartDOMDataMap().set(isolate, new DartDOMData(applicationLoader, co ntext)); |
| 272 ASSERT(context->isDocument()); | 272 ASSERT(context->isDocument()); |
| 273 } | 273 } |
| 274 | 274 |
| 275 void DartUtilities::registerPureIsolate(Dart_Isolate isolate, PassRefPtr<DartApp licationLoader> applicationLoader) | 275 void DartUtilities::registerPureIsolate(Dart_Isolate isolate, PassRefPtr<DartApp licationLoader> applicationLoader) |
| (...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 375 } | 375 } |
| 376 | 376 |
| 377 PassRefPtr<ScriptCallStack> DartUtilities::createScriptCallStack() | 377 PassRefPtr<ScriptCallStack> DartUtilities::createScriptCallStack() |
| 378 { | 378 { |
| 379 // FIXME: wrap current dart call stack as ScriptCallStack. | 379 // FIXME: wrap current dart call stack as ScriptCallStack. |
| 380 Vector<ScriptCallFrame> wrappedCallFrames; | 380 Vector<ScriptCallFrame> wrappedCallFrames; |
| 381 wrappedCallFrames.append(ScriptCallFrame("undefined", "undefined", 0)); | 381 wrappedCallFrames.append(ScriptCallFrame("undefined", "undefined", 0)); |
| 382 return ScriptCallStack::create(wrappedCallFrames); | 382 return ScriptCallStack::create(wrappedCallFrames); |
| 383 } | 383 } |
| 384 | 384 |
| 385 class WeakCallbackData | |
| 386 { | |
| 387 public: | |
| 388 void* peer; | |
| 389 Dart_WeakPersistentHandleFinalizer weakCallback; | |
| 390 Dart_Handle object; | |
| 391 }; | |
| 392 | |
| 393 static void weakCallbackWrapper(Dart_Handle object, void* peer) | |
| 394 { | |
| 395 WeakCallbackData* callbackData = static_cast<WeakCallbackData*>(peer); | |
| 396 DartUtilities::domDataForCurrentIsolate()->weakCallbacks()->remove(callbackD ata); | |
|
Anton Muhin
2012/03/29 19:18:45
maybe performance FIXME? linear search looks scar
podivilov
2012/03/30 10:36:28
weakCallbacks is HashSet, not vector.
| |
| 397 (*callbackData->weakCallback)(object, callbackData->peer); | |
| 398 delete callbackData; | |
| 399 } | |
| 400 | |
| 401 Dart_Handle DartUtilities::createWeakPersistentHandle(Dart_Handle object, void* peer, Dart_WeakPersistentHandleFinalizer weakCallback) | |
| 402 { | |
| 403 WeakCallbackData* callbackData = new WeakCallbackData; | |
|
Anton Muhin
2012/03/29 19:18:45
why not provide a ctor in the class itself?
podivilov
2012/03/30 10:36:28
Done.
| |
| 404 callbackData->peer = peer; | |
| 405 callbackData->weakCallback = weakCallback; | |
| 406 callbackData->object = Dart_NewWeakPersistentHandle(object, callbackData, &w eakCallbackWrapper); | |
| 407 domDataForCurrentIsolate()->weakCallbacks()->add(callbackData); | |
| 408 return callbackData->object; | |
| 409 } | |
| 410 | |
| 411 void DartUtilities::disposeWeakPersistentHandles() | |
| 412 { | |
| 413 DartWeakCallbacks* weakCallbacks = domDataForCurrentIsolate()->weakCallbacks (); | |
| 414 for (DartWeakCallbacks::iterator it = weakCallbacks->begin(); it != weakCall backs->end(); ++it) { | |
| 415 WeakCallbackData* callbackData = *it; | |
| 416 (*callbackData->weakCallback)(callbackData->object, callbackData->peer); | |
| 417 delete callbackData; | |
| 418 } | |
| 419 weakCallbacks->clear(); | |
| 420 } | |
| 421 | |
| 385 const uint8_t* DartUtilities::fullSnapshot() | 422 const uint8_t* DartUtilities::fullSnapshot() |
| 386 { | 423 { |
| 387 static const uint8_t snapshotBuffer[] = { | 424 static const uint8_t snapshotBuffer[] = { |
| 388 // DartSnapshot.bytes is generated by build system. | 425 // DartSnapshot.bytes is generated by build system. |
| 389 #include "DartSnapshot.bytes" | 426 #include "DartSnapshot.bytes" |
| 390 }; | 427 }; |
| 391 return snapshotBuffer; | 428 return snapshotBuffer; |
| 392 } | 429 } |
| 393 | 430 |
| 394 void DartUtilities::reportProblem(ScriptExecutionContext* context, Dart_Handle r esult) | 431 void DartUtilities::reportProblem(ScriptExecutionContext* context, Dart_Handle r esult) |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 443 ASSERT(!Dart_IsError(library)); | 480 ASSERT(!Dart_IsError(library)); |
| 444 Dart_Handle args[2] = {0}; | 481 Dart_Handle args[2] = {0}; |
| 445 args[0] = Dart_NewString(fileName); | 482 args[0] = Dart_NewString(fileName); |
| 446 args[1] = Dart_NewInteger(lineNumber); | 483 args[1] = Dart_NewInteger(lineNumber); |
| 447 Dart_Handle result = Dart_InvokeStatic(library, Dart_NewString("Utils"), Dar t_NewString("makeNotImplementedException"), 2, args); | 484 Dart_Handle result = Dart_InvokeStatic(library, Dart_NewString("Utils"), Dar t_NewString("makeNotImplementedException"), 2, args); |
| 448 ASSERT(!Dart_IsError(result)); | 485 ASSERT(!Dart_IsError(result)); |
| 449 return result; | 486 return result; |
| 450 } | 487 } |
| 451 | 488 |
| 452 } | 489 } |
| OLD | NEW |