| OLD | NEW |
| 1 // Copyright 2012, Google Inc. | 1 // Copyright 2012, 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 25 matching lines...) Expand all Loading... |
| 36 namespace WebCore { | 36 namespace WebCore { |
| 37 | 37 |
| 38 DartStringCache::DartStringCache() | 38 DartStringCache::DartStringCache() |
| 39 { | 39 { |
| 40 m_lastStringImpl = 0; | 40 m_lastStringImpl = 0; |
| 41 m_lastDartString = 0; | 41 m_lastDartString = 0; |
| 42 } | 42 } |
| 43 | 43 |
| 44 void DartStringCache::clearWeakHandles() | 44 void DartStringCache::clearWeakHandles() |
| 45 { | 45 { |
| 46 Dart_Isolate isolate = Dart_CurrentIsolate(); |
| 46 for (StringCache::iterator it = m_stringCache.begin(); it != m_stringCache.e
nd(); ++it) { | 47 for (StringCache::iterator it = m_stringCache.begin(); it != m_stringCache.e
nd(); ++it) { |
| 47 it->key->deref(); | 48 it->key->deref(); |
| 48 Dart_DeleteWeakPersistentHandle(it->value); | 49 Dart_DeleteWeakPersistentHandle(isolate, it->value); |
| 49 } | 50 } |
| 50 m_stringCache.clear(); | 51 m_stringCache.clear(); |
| 51 m_lastStringImpl = 0; | 52 m_lastStringImpl = 0; |
| 52 m_lastDartString = 0; | 53 m_lastDartString = 0; |
| 53 } | 54 } |
| 54 | 55 |
| 55 Dart_WeakPersistentHandle DartStringCache::getSlow(StringImpl* stringImpl, bool
autoDartScope) | 56 Dart_WeakPersistentHandle DartStringCache::getSlow(StringImpl* stringImpl, bool
autoDartScope) |
| 56 { | 57 { |
| 57 ASSERT(stringImpl); | 58 ASSERT(stringImpl); |
| 58 | 59 |
| (...skipping 18 matching lines...) Expand all Loading... |
| 77 | 78 |
| 78 m_lastStringImpl = stringImpl; | 79 m_lastStringImpl = stringImpl; |
| 79 m_lastDartString = wrapper; | 80 m_lastDartString = wrapper; |
| 80 | 81 |
| 81 if (!autoDartScope) | 82 if (!autoDartScope) |
| 82 Dart_ExitScope(); | 83 Dart_ExitScope(); |
| 83 | 84 |
| 84 return wrapper; | 85 return wrapper; |
| 85 } | 86 } |
| 86 | 87 |
| 87 void DartStringCache::handleFinalizer(Dart_WeakPersistentHandle handle, void* pe
er) | 88 void DartStringCache::handleFinalizer(Dart_Isolate isolate, Dart_WeakPersistentH
andle handle, void* peer) |
| 88 { | 89 { |
| 89 StringImpl* stringImpl = reinterpret_cast<StringImpl*>(peer); | 90 StringImpl* stringImpl = reinterpret_cast<StringImpl*>(peer); |
| 90 DartStringCache& stringCache = DartDOMData::current()->stringCache(); | 91 DartDOMData* domData = reinterpret_cast<DartDOMData*>(Dart_IsolateData(isola
te)); |
| 92 DartStringCache& stringCache = domData->stringCache(); |
| 91 Dart_WeakPersistentHandle ALLOW_UNUSED cached = stringCache.m_stringCache.ta
ke(stringImpl); | 93 Dart_WeakPersistentHandle ALLOW_UNUSED cached = stringCache.m_stringCache.ta
ke(stringImpl); |
| 92 ASSERT(handle == cached); | 94 ASSERT(handle == cached); |
| 93 if (stringCache.m_lastDartString == handle) { | 95 if (stringCache.m_lastDartString == handle) { |
| 94 stringCache.m_lastStringImpl = 0; | 96 stringCache.m_lastStringImpl = 0; |
| 95 stringCache.m_lastDartString = 0; | 97 stringCache.m_lastDartString = 0; |
| 96 } | 98 } |
| 97 Dart_DeleteWeakPersistentHandle(handle); | 99 Dart_DeleteWeakPersistentHandle(isolate, handle); |
| 98 stringImpl->deref(); | 100 stringImpl->deref(); |
| 99 } | 101 } |
| 100 | 102 |
| 101 } | 103 } |
| OLD | NEW |