Changeset 121144 in webkit
- Timestamp:
- Jun 25, 2012 2:26:50 AM (12 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 13 edited
- 1 moved
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r121137 r121144 1 2012-06-22 Yury Semikhatsky <yurys@chromium.org> 2 3 Web Inspector: add external resources size to the native memory diagram 4 https://bugs.webkit.org/show_bug.cgi?id=89754 5 6 Reviewed by Vsevolod Vlasov. 7 8 Size of external strings and arrays is now reported through the inspector 9 protocol and displayed on the native memory chart. 10 11 * GNUmakefile.list.am: 12 * Target.pri: 13 * WebCore.gypi: 14 * WebCore.vcproj/WebCore.vcproj: 15 * WebCore.xcodeproj/project.pbxproj: 16 * bindings/js/ScriptProfiler.h: 17 (WebCore): 18 (WebCore::ScriptProfiler::visitJSDOMWrappers): 19 (WebCore::ScriptProfiler::visitExternalJSStrings): 20 (WebCore::ScriptProfiler::visitExternalJSArrays): 21 * bindings/v8/ScriptProfiler.cpp: 22 (WebCore::ScriptProfiler::visitJSDOMWrappers): 23 (WebCore::ScriptProfiler::visitExternalJSStrings): 24 (WebCore::ScriptProfiler::visitExternalJSArrays): 25 (WebCore): 26 * bindings/v8/ScriptProfiler.h: 27 (WebCore): 28 (ScriptProfiler): 29 * bindings/v8/V8Binding.cpp: 30 (WebCore::WebCoreStringResource::visitStrings): 31 (WebCore::V8BindingPerIsolateData::visitJSExternalStrings): 32 * bindings/v8/V8Binding.h: 33 (WebCore): 34 (V8BindingPerIsolateData): 35 * inspector/BindingVisitors.h: Renamed from Source/WebCore/inspector/DOMWrapperVisitor.h. 36 (WTF): 37 (WebCore): 38 (NodeWrapperVisitor): 39 (WebCore::NodeWrapperVisitor::~NodeWrapperVisitor): 40 (ExternalStringVisitor): 41 (WebCore::ExternalStringVisitor::~ExternalStringVisitor): 42 (ExternalArrayVisitor): 43 (WebCore::ExternalArrayVisitor::~ExternalArrayVisitor): 44 * inspector/InspectorMemoryAgent.cpp: 45 (MemoryBlockName): 46 (WebCore): 47 (WebCore::jsExternalResourcesInfo): 48 (WebCore::InspectorMemoryAgent::getProcessMemoryDistribution): 49 * inspector/front-end/NativeMemorySnapshotView.js: 50 (WebInspector.MemoryBlockViewProperties._initialize): 51 1 52 2012-06-24 Fumitoshi Ukai <ukai@chromium.org> 2 53 -
trunk/Source/WebCore/GNUmakefile.list.am
r121022 r121144 2643 2643 Source/WebCore/icu/unicode/utypes.h \ 2644 2644 Source/WebCore/icu/unicode/uversion.h \ 2645 Source/WebCore/inspector/BindingVisitors.h \ 2645 2646 Source/WebCore/inspector/ConsoleMessage.cpp \ 2646 2647 Source/WebCore/inspector/ConsoleMessage.h \ … … 2653 2654 Source/WebCore/inspector/DOMPatchSupport.cpp \ 2654 2655 Source/WebCore/inspector/DOMPatchSupport.h \ 2655 Source/WebCore/inspector/DOMWrapperVisitor.h \2656 2656 Source/WebCore/inspector/IdentifiersFactory.cpp \ 2657 2657 Source/WebCore/inspector/IdentifiersFactory.h \ -
trunk/Source/WebCore/Target.pri
r121022 r121144 2036 2036 html/track/WebVTTToken.h \ 2037 2037 html/track/WebVTTTokenizer.h \ 2038 inspector/BindingVisitor.h \ 2038 2039 inspector/ConsoleMessage.h \ 2039 2040 inspector/ContentSearchUtils.h \ … … 2041 2042 inspector/DOMNodeHighlighter.h \ 2042 2043 inspector/DOMPatchSupport.h \ 2043 inspector/DOMWrapperVisitor.h \2044 2044 inspector/IdentifiersFactory.h \ 2045 2045 inspector/InjectedScript.h \ -
trunk/Source/WebCore/WebCore.gypi
r121069 r121144 2754 2754 'icu/unicode/utypes.h', 2755 2755 'icu/unicode/uversion.h', 2756 'inspector/BindingVisitors.h', 2756 2757 'inspector/ConsoleMessage.cpp', 2757 2758 'inspector/ConsoleMessage.h', … … 2764 2765 'inspector/DOMPatchSupport.cpp', 2765 2766 'inspector/DOMPatchSupport.h', 2766 'inspector/DOMWrapperVisitor.h',2767 2767 'inspector/IdentifiersFactory.cpp', 2768 2768 'inspector/IdentifiersFactory.h', -
trunk/Source/WebCore/WebCore.vcproj/WebCore.vcproj
r121022 r121144 73188 73188 > 73189 73189 <File 73190 RelativePath="..\inspector\BindingVisitors.h" 73191 > 73192 </File> 73193 <File 73190 73194 RelativePath="..\inspector\ConsoleMessage.cpp" 73191 73195 > … … 73305 73309 <File 73306 73310 RelativePath="..\inspector\DOMPatchSupport.h" 73307 >73308 </File>73309 <File73310 RelativePath="..\inspector\DOMWrapperVisitor.h"73311 73311 > 73312 73312 </File> -
trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj
r121059 r121144 6121 6121 F34742E91343635000531BC2 /* WorkerScriptDebugServer.h in Headers */ = {isa = PBXBuildFile; fileRef = F34742E71343635000531BC2 /* WorkerScriptDebugServer.h */; }; 6122 6122 F350B73513F1377D00880C43 /* InstrumentingAgents.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F350B73413F1377D00880C43 /* InstrumentingAgents.cpp */; }; 6123 F35AE5AC14925F5B004D5776 /* DOMWrapperVisitor.h in Headers */ = {isa = PBXBuildFile; fileRef = F35AE5AB14925F5B004D5776 /* DOMWrapperVisitor.h */; };6123 F35AE5AC14925F5B004D5776 /* BindingVisitors.h in Headers */ = {isa = PBXBuildFile; fileRef = F35AE5AB14925F5B004D5776 /* BindingVisitors.h */; }; 6124 6124 F3644AFF1119805900E0D537 /* InjectedScript.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F3644AFD1119805900E0D537 /* InjectedScript.cpp */; }; 6125 6125 F3644B001119805900E0D537 /* InjectedScript.h in Headers */ = {isa = PBXBuildFile; fileRef = F3644AFE1119805900E0D537 /* InjectedScript.h */; }; … … 13389 13389 F34742E71343635000531BC2 /* WorkerScriptDebugServer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WorkerScriptDebugServer.h; sourceTree = "<group>"; }; 13390 13390 F350B73413F1377D00880C43 /* InstrumentingAgents.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = InstrumentingAgents.cpp; sourceTree = "<group>"; }; 13391 F35AE5AB14925F5B004D5776 /* DOMWrapperVisitor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DOMWrapperVisitor.h; sourceTree = "<group>"; };13391 F35AE5AB14925F5B004D5776 /* BindingVisitors.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BindingVisitors.h; sourceTree = "<group>"; }; 13392 13392 F3644AFD1119805900E0D537 /* InjectedScript.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = InjectedScript.cpp; sourceTree = "<group>"; }; 13393 13393 F3644AFE1119805900E0D537 /* InjectedScript.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InjectedScript.h; sourceTree = "<group>"; }; … … 14415 14415 children = ( 14416 14416 1C81B9590E97330800266E07 /* front-end */, 14417 F35AE5AB14925F5B004D5776 /* BindingVisitors.h */, 14417 14418 41F0618D0F5F069800A07EAC /* ConsoleMessage.cpp */, 14418 14419 41F0618C0F5F069800A07EAC /* ConsoleMessage.h */, … … 14425 14426 7A54881614E432A1006AE05A /* DOMPatchSupport.cpp */, 14426 14427 7A54881514E432A1006AE05A /* DOMPatchSupport.h */, 14427 F35AE5AB14925F5B004D5776 /* DOMWrapperVisitor.h */,14428 14428 5913A23F13D49EBA00F5B05C /* IdentifiersFactory.cpp */, 14429 14429 5913A24013D49EBA00F5B05C /* IdentifiersFactory.h */, … … 22037 22037 A622A8FB122C44A600A785B3 /* BindingSecurity.h in Headers */, 22038 22038 A622A8FD122C44A600A785B3 /* BindingSecurityBase.h in Headers */, 22039 F35AE5AC14925F5B004D5776 /* BindingVisitors.h in Headers */, 22039 22040 FD31608D12B026F700C1A359 /* Biquad.h in Headers */, 22040 22041 FD31602512B0267600C1A359 /* BiquadDSPKernel.h in Headers */, … … 22921 22922 89F60B11157F686E0075E157 /* DOMWindowQuota.h in Headers */, 22922 22923 A8CCBB49151F831600AB7CE9 /* DOMWindowWebDatabase.h in Headers */, 22923 F35AE5AC14925F5B004D5776 /* DOMWrapperVisitor.h in Headers */,22924 22924 BC53DA2E1143121E000D817E /* DOMWrapperWorld.h in Headers */, 22925 22925 1A1D13800A5325520064BF5F /* DOMXPath.h in Headers */, -
trunk/Source/WebCore/bindings/js/ScriptProfiler.h
r120791 r121144 37 37 namespace WebCore { 38 38 39 class DOMWrapperVisitor; 39 class ExternalArrayVisitor; 40 class ExternalStringVisitor; 41 class NodeWrapperVisitor; 40 42 class Page; 41 43 class ScriptObject; … … 73 75 static bool hasHeapProfiler() { return false; } 74 76 // FIXME: Implement this counter for JSC. See bug 73936 for more details. 75 static void visitJSDOMWrappers(DOMWrapperVisitor*) { } 76 static void visitExternalJSStrings(DOMWrapperVisitor*) { } 77 static void visitNodeWrappers(NodeWrapperVisitor*) { } 78 static void visitExternalStrings(ExternalStringVisitor*) { } 79 static void visitExternalArrays(ExternalArrayVisitor*) { } 77 80 static size_t profilerSnapshotsSize() { return 0; } 78 81 }; -
trunk/Source/WebCore/bindings/v8/ScriptProfiler.cpp
r120791 r121144 33 33 #include "ScriptProfiler.h" 34 34 35 #include " DOMWrapperVisitor.h"35 #include "BindingVisitors.h" 36 36 #include "RetainedDOMInfo.h" 37 37 #include "ScriptObject.h" 38 #include "V8ArrayBufferView.h" 38 39 #include "V8Binding.h" 39 40 #include "V8DOMMap.h" … … 176 177 } 177 178 178 void ScriptProfiler::visit JSDOMWrappers(DOMWrapperVisitor* visitor)179 void ScriptProfiler::visitNodeWrappers(NodeWrapperVisitor* visitor) 179 180 { 180 181 class VisitorAdapter : public DOMWrapperMap<Node>::Visitor { 181 182 public: 182 VisitorAdapter( DOMWrapperVisitor* visitor) : m_visitor(visitor) { }183 VisitorAdapter(NodeWrapperVisitor* visitor) : m_visitor(visitor) { } 183 184 184 185 virtual void visitDOMWrapper(DOMDataStore*, Node* node, v8::Persistent<v8::Object>) … … 187 188 } 188 189 private: 189 DOMWrapperVisitor* m_visitor;190 NodeWrapperVisitor* m_visitor; 190 191 } adapter(visitor); 191 192 visitDOMNodes(&adapter); 192 193 } 193 194 194 void ScriptProfiler::visitExternalJSStrings(DOMWrapperVisitor* visitor) 195 { 196 V8BindingPerIsolateData::current()->visitJSExternalStrings(visitor); 195 void ScriptProfiler::visitExternalStrings(ExternalStringVisitor* visitor) 196 { 197 V8BindingPerIsolateData::current()->visitExternalStrings(visitor); 198 } 199 200 void ScriptProfiler::visitExternalArrays(ExternalArrayVisitor* visitor) 201 { 202 class VisitorAdapter : public DOMWrapperMap<void>::Visitor { 203 public: 204 VisitorAdapter(ExternalArrayVisitor* visitor) : m_visitor(visitor) { } 205 206 virtual void visitDOMWrapper(DOMDataStore*, void* impl, v8::Persistent<v8::Object> v8Object) 207 { 208 WrapperTypeInfo* type = V8DOMWrapper::domWrapperType(v8Object); 209 if (!type->isSubclass(&V8ArrayBufferView::info)) 210 return; 211 ArrayBufferView* arrayBufferView = V8ArrayBufferView::toNative(v8Object); 212 m_visitor->visitJSExternalArray(arrayBufferView); 213 } 214 private: 215 ExternalArrayVisitor* m_visitor; 216 } adapter(visitor); 217 218 getDOMObjectMap().visit(0, &adapter); 219 197 220 } 198 221 -
trunk/Source/WebCore/bindings/v8/ScriptProfiler.h
r120791 r121144 41 41 namespace WebCore { 42 42 43 class DOMWrapperVisitor; 43 class ExternalArrayVisitor; 44 class ExternalStringVisitor; 45 class NodeWrapperVisitor; 44 46 class Page; 45 47 class ScriptObject; … … 77 79 static bool hasHeapProfiler() { return true; } 78 80 static void initialize(); 79 static void visitJSDOMWrappers(DOMWrapperVisitor*); 80 static void visitExternalJSStrings(DOMWrapperVisitor*); 81 static void visitNodeWrappers(NodeWrapperVisitor*); 82 static void visitExternalStrings(ExternalStringVisitor*); 83 static void visitExternalArrays(ExternalArrayVisitor*); 81 84 static size_t profilerSnapshotsSize(); 82 85 }; -
trunk/Source/WebCore/bindings/v8/V8Binding.cpp
r120389 r121144 32 32 #include "V8Binding.h" 33 33 34 #include "BindingVisitors.h" 34 35 #include "DOMStringList.h" 35 #include "DOMWrapperVisitor.h"36 36 #include "Element.h" 37 37 #include "PlatformString.h" … … 151 151 } 152 152 153 void visitStrings( DOMWrapperVisitor* visitor)153 void visitStrings(ExternalStringVisitor* visitor) 154 154 { 155 155 visitor->visitJSExternalString(m_plainString.impl()); … … 179 179 180 180 #if ENABLE(INSPECTOR) 181 void V8BindingPerIsolateData::visit JSExternalStrings(DOMWrapperVisitor* visitor)181 void V8BindingPerIsolateData::visitExternalStrings(ExternalStringVisitor* visitor) 182 182 { 183 183 v8::HandleScope handleScope; 184 184 class VisitorImpl : public v8::ExternalResourceVisitor { 185 185 public: 186 VisitorImpl( DOMWrapperVisitor* visitor) : m_visitor(visitor) { }186 VisitorImpl(ExternalStringVisitor* visitor) : m_visitor(visitor) { } 187 187 virtual ~VisitorImpl() { } 188 188 virtual void VisitExternalString(v8::Handle<v8::String> string) … … 193 193 } 194 194 private: 195 DOMWrapperVisitor* m_visitor;195 ExternalStringVisitor* m_visitor; 196 196 } v8Visitor(visitor); 197 197 v8::V8::VisitExternalResources(&v8Visitor); -
trunk/Source/WebCore/bindings/v8/V8Binding.h
r120389 r121144 47 47 48 48 class DOMStringList; 49 class DOMWrapperVisitor;50 49 class EventListener; 51 50 class EventTarget; 51 class ExternalStringVisitor; 52 52 53 53 // FIXME: Remove V8Binding. … … 147 147 StringCache* stringCache() { return &m_stringCache; } 148 148 #if ENABLE(INSPECTOR) 149 void visit JSExternalStrings(DOMWrapperVisitor*);149 void visitExternalStrings(ExternalStringVisitor*); 150 150 #endif 151 151 DOMDataList& allStores() { return m_domDataList; } -
trunk/Source/WebCore/inspector/BindingVisitors.h
r121143 r121144 27 27 */ 28 28 29 #ifndef DOMWrapperVisitor_h 30 #define DOMWrapperVisitor_h 29 #ifndef BindingVisitors_h 30 #define BindingVisitors_h 31 32 namespace WTF { 33 class ArrayBufferView; 34 class StringImpl; 35 } 31 36 32 37 namespace WebCore { … … 34 39 class Node; 35 40 36 class DOMWrapperVisitor {41 class NodeWrapperVisitor { 37 42 public: 38 43 virtual void visitNode(Node*) = 0; 39 virtual void visitJSExternalString(StringImpl*) = 0;40 44 protected: 41 virtual ~DOMWrapperVisitor() { } 45 virtual ~NodeWrapperVisitor() { } 46 }; 47 48 class ExternalStringVisitor { 49 public: 50 virtual void visitJSExternalString(WTF::StringImpl*) = 0; 51 protected: 52 virtual ~ExternalStringVisitor() { } 53 }; 54 55 56 class ExternalArrayVisitor { 57 public: 58 virtual void visitJSExternalArray(WTF::ArrayBufferView*) = 0; 59 protected: 60 virtual ~ExternalArrayVisitor() { } 42 61 }; 43 62 44 63 } // namespace WebCore 45 64 46 #endif // DOMWrapperVisitor_h65 #endif // BindingVisitors_h -
trunk/Source/WebCore/inspector/InspectorMemoryAgent.cpp
r121022 r121144 35 35 #include "InspectorMemoryAgent.h" 36 36 37 #include "BindingVisitors.h" 37 38 #include "CharacterData.h" 38 #include "DOMWrapperVisitor.h"39 39 #include "Document.h" 40 40 #include "EventListenerMap.h" … … 52 52 #include "ScriptProfiler.h" 53 53 #include "StyledElement.h" 54 #include <wtf/ArrayBuffer.h> 55 #include <wtf/ArrayBufferView.h> 54 56 #include <wtf/HashSet.h> 55 57 #include <wtf/text/StringBuilder.h> … … 68 70 static const char jsHeapAllocated[] = "JSHeapAllocated"; 69 71 static const char jsHeapUsed[] = "JSHeapUsed"; 72 static const char jsExternalResources[] = "JSExternalResources"; 73 static const char jsExternalArrays[] = "JSExternalArrays"; 74 static const char jsExternalStrings[] = "JSExternalStrings"; 70 75 static const char inspectorData[] = "InspectorData"; 71 76 static const char memoryCache[] = "MemoryCache"; … … 95 100 } 96 101 97 int stringSize(StringImpl* string)98 { 99 int size = string->length();102 size_t stringSize(StringImpl* string) 103 { 104 size_t size = string->length(); 100 105 if (!string->is8Bit()) 101 106 size *= 2; … … 219 224 }; 220 225 221 class CounterVisitor : public DOMWrapperVisitor {226 class CounterVisitor : public NodeWrapperVisitor, public ExternalStringVisitor { 222 227 public: 223 228 CounterVisitor(Page* page) … … 309 314 }; 310 315 316 class ExternalResourceVisitor : public ExternalStringVisitor, public ExternalArrayVisitor { 317 public: 318 ExternalResourceVisitor() 319 : m_jsExternalStringSize(0) 320 , m_externalArraySize(0) 321 { } 322 323 size_t externalStringSize() const { return m_jsExternalStringSize; } 324 size_t externalArraySize() const { return m_externalArraySize; } 325 326 private: 327 virtual void visitJSExternalArray(ArrayBufferView* bufferView) 328 { 329 ArrayBuffer* buffer = bufferView->buffer().get(); 330 if (m_arrayBuffers.add(buffer).isNewEntry) 331 m_externalArraySize += buffer->byteLength(); 332 } 333 virtual void visitJSExternalString(StringImpl* string) 334 { 335 int size = stringSize(string); 336 m_jsExternalStringSize += size; 337 } 338 339 size_t m_jsExternalStringSize; 340 size_t m_externalArraySize; 341 HashSet<ArrayBuffer*> m_arrayBuffers; 342 }; 343 311 344 } // namespace 312 345 … … 318 351 { 319 352 CounterVisitor counterVisitor(m_page); 320 ScriptProfiler::visit JSDOMWrappers(&counterVisitor);353 ScriptProfiler::visitNodeWrappers(&counterVisitor); 321 354 322 355 // Make sure all documents reachable from the main frame are accounted. … … 326 359 } 327 360 328 ScriptProfiler::visitExternal JSStrings(&counterVisitor);361 ScriptProfiler::visitExternalStrings(&counterVisitor); 329 362 330 363 domGroups = counterVisitor.domGroups(); … … 425 458 }; 426 459 427 class DOMTreesIterator : public DOMWrapperVisitor {460 class DOMTreesIterator : public NodeWrapperVisitor { 428 461 public: 429 462 explicit DOMTreesIterator(Page* page) : m_page(page) { } … … 436 469 m_domMemoryUsage.reportInstrumentedPointer(node); 437 470 } 438 439 virtual void visitJSExternalString(StringImpl*) { }440 471 441 472 PassRefPtr<InspectorMemoryBlock> dumpStatistics() { return m_domMemoryUsage.dumpStatistics(); } … … 451 482 { 452 483 DOMTreesIterator domTreesIterator(page); 453 ScriptProfiler::visit JSDOMWrappers(&domTreesIterator);484 ScriptProfiler::visitNodeWrappers(&domTreesIterator); 454 485 455 486 // Make sure all documents reachable from the main frame are accounted. … … 483 514 } 484 515 516 static PassRefPtr<InspectorMemoryBlock> jsExternalResourcesInfo() 517 { 518 ExternalResourceVisitor visitor; 519 ScriptProfiler::visitExternalStrings(&visitor); 520 ScriptProfiler::visitExternalArrays(&visitor); 521 522 RefPtr<InspectorMemoryBlock> externalResourcesStats = InspectorMemoryBlock::create().setName(MemoryBlockName::jsExternalResources); 523 externalResourcesStats->setSize(visitor.externalStringSize() + visitor.externalArraySize()); 524 RefPtr<TypeBuilder::Array<InspectorMemoryBlock> > children = TypeBuilder::Array<InspectorMemoryBlock>::create(); 525 526 RefPtr<InspectorMemoryBlock> externalStringStats = InspectorMemoryBlock::create().setName(MemoryBlockName::jsExternalStrings); 527 externalStringStats->setSize(visitor.externalStringSize()); 528 children->addItem(externalStringStats); 529 530 RefPtr<InspectorMemoryBlock> externalArrayStats = InspectorMemoryBlock::create().setName(MemoryBlockName::jsExternalArrays); 531 externalArrayStats->setSize(visitor.externalArraySize()); 532 children->addItem(externalArrayStats); 533 534 return externalResourcesStats.release(); 535 } 536 485 537 void InspectorMemoryAgent::getProcessMemoryDistribution(ErrorString*, RefPtr<InspectorMemoryBlock>& processMemory) 486 538 { … … 493 545 RefPtr<TypeBuilder::Array<InspectorMemoryBlock> > children = TypeBuilder::Array<InspectorMemoryBlock>::create(); 494 546 children->addItem(jsHeapInfo()); 547 children->addItem(jsExternalResourcesInfo()); 495 548 children->addItem(inspectorData()); 496 549 children->addItem(memoryCacheInfo()); -
trunk/Source/WebCore/inspector/front-end/NativeMemorySnapshotView.js
r120829 r121144 219 219 addBlock("hsl( 90, 60%, 80%)", "JSHeapAllocated", "JavaScript heap"); 220 220 addBlock("hsl( 90, 80%, 80%)", "JSHeapUsed", "Used JavaScript heap"); 221 addBlock("hsl( 90, 30%, 80%)", "JSExternalResources", "JavaScript external resources"); 222 addBlock("hsl( 90, 40%, 80%)", "JSExternalArrays", "JavaScript external arrays"); 223 addBlock("hsl( 90, 50%, 80%)", "JSExternalStrings", "JavaScript external strings"); 221 224 addBlock("hsl(210, 60%, 80%)", "InspectorData", "Inspector data"); 222 225 addBlock("hsl( 30, 60%, 80%)", "MemoryCache", "Memory cache resources");
Note: See TracChangeset
for help on using the changeset viewer.