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

Side by Side Diff: third_party/WebKit/Source/modules/indexeddb/IDBDatabase.cpp

Issue 2583093002: Reduce SuspendableObjects (Closed)
Patch Set: Created 4 years 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 unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2010 Google Inc. All rights reserved. 2 * Copyright (C) 2010 Google Inc. 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 5 * modification, are permitted provided that the following conditions
6 * are met: 6 * are met:
7 * 7 *
8 * 1. Redistributions of source code must retain the above copyright 8 * 1. 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 * 2. Redistributions in binary form must reproduce the above copyright 10 * 2. Redistributions in binary form must reproduce the above copyright
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
85 const char IDBDatabase::transactionFinishedErrorMessage[] = 85 const char IDBDatabase::transactionFinishedErrorMessage[] =
86 "The transaction has finished."; 86 "The transaction has finished.";
87 const char IDBDatabase::transactionReadOnlyErrorMessage[] = 87 const char IDBDatabase::transactionReadOnlyErrorMessage[] =
88 "The transaction is read-only."; 88 "The transaction is read-only.";
89 const char IDBDatabase::databaseClosedErrorMessage[] = 89 const char IDBDatabase::databaseClosedErrorMessage[] =
90 "The database connection is closed."; 90 "The database connection is closed.";
91 91
92 IDBDatabase* IDBDatabase::create(ExecutionContext* context, 92 IDBDatabase* IDBDatabase::create(ExecutionContext* context,
93 std::unique_ptr<WebIDBDatabase> database, 93 std::unique_ptr<WebIDBDatabase> database,
94 IDBDatabaseCallbacks* callbacks) { 94 IDBDatabaseCallbacks* callbacks) {
95 IDBDatabase* idbDatabase = 95 return new IDBDatabase(context, std::move(database), callbacks);
96 new IDBDatabase(context, std::move(database), callbacks);
97 idbDatabase->suspendIfNeeded();
98 return idbDatabase;
99 } 96 }
100 97
101 IDBDatabase::IDBDatabase(ExecutionContext* context, 98 IDBDatabase::IDBDatabase(ExecutionContext* context,
102 std::unique_ptr<WebIDBDatabase> backend, 99 std::unique_ptr<WebIDBDatabase> backend,
103 IDBDatabaseCallbacks* callbacks) 100 IDBDatabaseCallbacks* callbacks)
104 : SuspendableObject(context), 101 : ContextLifecycleObserver(context),
105 m_backend(std::move(backend)), 102 m_backend(std::move(backend)),
106 m_databaseCallbacks(callbacks) { 103 m_databaseCallbacks(callbacks) {
107 m_databaseCallbacks->connect(this); 104 m_databaseCallbacks->connect(this);
108 } 105 }
109 106
110 IDBDatabase::~IDBDatabase() { 107 IDBDatabase::~IDBDatabase() {
111 if (!m_closePending && m_backend) 108 if (!m_closePending && m_backend)
112 m_backend->close(); 109 m_backend->close();
113 } 110 }
114 111
115 DEFINE_TRACE(IDBDatabase) { 112 DEFINE_TRACE(IDBDatabase) {
116 visitor->trace(m_versionChangeTransaction); 113 visitor->trace(m_versionChangeTransaction);
117 visitor->trace(m_transactions); 114 visitor->trace(m_transactions);
118 visitor->trace(m_observers); 115 visitor->trace(m_observers);
119 visitor->trace(m_enqueuedEvents); 116 visitor->trace(m_enqueuedEvents);
120 visitor->trace(m_databaseCallbacks); 117 visitor->trace(m_databaseCallbacks);
121 EventTargetWithInlineData::trace(visitor); 118 EventTargetWithInlineData::trace(visitor);
122 SuspendableObject::trace(visitor); 119 ContextLifecycleObserver::trace(visitor);
123 } 120 }
124 121
125 int64_t IDBDatabase::nextTransactionId() { 122 int64_t IDBDatabase::nextTransactionId() {
126 // Only keep a 32-bit counter to allow ports to use the other 32 123 // Only keep a 32-bit counter to allow ports to use the other 32
127 // bits of the id. 124 // bits of the id.
128 static int currentTransactionId = 0; 125 static int currentTransactionId = 0;
129 return atomicIncrement(&currentTransactionId); 126 return atomicIncrement(&currentTransactionId);
130 } 127 }
131 128
132 int32_t IDBDatabase::nextObserverId() { 129 int32_t IDBDatabase::nextObserverId() {
(...skipping 438 matching lines...) Expand 10 before | Expand all | Expand 10 after
571 568
572 if (m_databaseCallbacks) 569 if (m_databaseCallbacks)
573 m_databaseCallbacks->detachWebCallbacks(); 570 m_databaseCallbacks->detachWebCallbacks();
574 } 571 }
575 572
576 const AtomicString& IDBDatabase::interfaceName() const { 573 const AtomicString& IDBDatabase::interfaceName() const {
577 return EventTargetNames::IDBDatabase; 574 return EventTargetNames::IDBDatabase;
578 } 575 }
579 576
580 ExecutionContext* IDBDatabase::getExecutionContext() const { 577 ExecutionContext* IDBDatabase::getExecutionContext() const {
581 return SuspendableObject::getExecutionContext(); 578 return ContextLifecycleObserver::getExecutionContext();
582 } 579 }
583 580
584 void IDBDatabase::recordApiCallsHistogram(IndexedDatabaseMethods method) { 581 void IDBDatabase::recordApiCallsHistogram(IndexedDatabaseMethods method) {
585 DEFINE_THREAD_SAFE_STATIC_LOCAL( 582 DEFINE_THREAD_SAFE_STATIC_LOCAL(
586 EnumerationHistogram, apiCallsHistogram, 583 EnumerationHistogram, apiCallsHistogram,
587 new EnumerationHistogram("WebCore.IndexedDB.FrontEndAPICalls", 584 new EnumerationHistogram("WebCore.IndexedDB.FrontEndAPICalls",
588 IDBMethodsMax)); 585 IDBMethodsMax));
589 apiCallsHistogram.count(method); 586 apiCallsHistogram.count(method);
590 } 587 }
591 588
592 } // namespace blink 589 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698