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

Unified Diff: src/objects.cc

Issue 1840193003: Speed up accessing default code caches in maps. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 4 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
« no previous file with comments | « src/ic/ic.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/objects.cc
diff --git a/src/objects.cc b/src/objects.cc
index 98d61909b806d4d724517aea9226fe3efb5ebcc9..82516427a4fbc7620b6cb5b2207244fef976efda 100644
--- a/src/objects.cc
+++ b/src/objects.cc
@@ -10123,6 +10123,7 @@ void CodeCache::Update(
void CodeCache::UpdateDefaultCache(
Handle<CodeCache> code_cache, Handle<Name> name, Handle<Code> code) {
+ Isolate* isolate = code_cache->GetIsolate();
// When updating the default code cache we disregard the type encoded in the
// flags. This allows call constant stubs to overwrite call field
// stubs, etc.
@@ -10135,19 +10136,23 @@ void CodeCache::UpdateDefaultCache(
{
DisallowHeapAllocation no_alloc;
int deleted_index = -1;
+ Object* null = isolate->heap()->null_value();
+ Object* undefined = isolate->heap()->undefined_value();
+ DCHECK(name->IsUniqueName());
for (int i = 0; i < length; i += kCodeCacheEntrySize) {
Object* key = cache->get(i);
- if (key->IsNull()) {
+ if (key == null) {
if (deleted_index < 0) deleted_index = i;
continue;
}
- if (key->IsUndefined()) {
+ if (key == undefined) {
if (deleted_index >= 0) i = deleted_index;
cache->set(i + kCodeCacheEntryNameOffset, *name);
cache->set(i + kCodeCacheEntryCodeOffset, *code);
return;
}
- if (name->Equals(Name::cast(key))) {
+ DCHECK(key->IsUniqueName());
+ if (*name == key) {
Code::Flags found =
Code::cast(cache->get(i + kCodeCacheEntryCodeOffset))->flags();
if (Code::RemoveTypeFromFlags(found) == flags) {
@@ -10168,7 +10173,6 @@ void CodeCache::UpdateDefaultCache(
// Extend the code cache with some new entries (at least one). Must be a
// multiple of the entry size.
- Isolate* isolate = cache->GetIsolate();
int new_length = length + (length >> 1) + kCodeCacheEntrySize;
new_length = new_length - new_length % kCodeCacheEntrySize;
DCHECK((new_length % kCodeCacheEntrySize) == 0);
@@ -10203,13 +10207,18 @@ Object* CodeCache::Lookup(Name* name, Code::Flags flags) {
Object* CodeCache::LookupDefaultCache(Name* name, Code::Flags flags) {
FixedArray* cache = default_cache();
+ Heap* heap = GetHeap();
+ Object* null = heap->null_value();
+ Object* undefined = heap->undefined_value();
int length = cache->length();
+ DCHECK(name->IsUniqueName());
for (int i = 0; i < length; i += kCodeCacheEntrySize) {
Object* key = cache->get(i + kCodeCacheEntryNameOffset);
// Skip deleted elements.
- if (key->IsNull()) continue;
- if (key->IsUndefined()) return key;
- if (name->Equals(Name::cast(key))) {
+ if (key == null) continue;
+ if (key == undefined) return key;
+ DCHECK(key->IsUniqueName());
+ if (name == key) {
Code* code = Code::cast(cache->get(i + kCodeCacheEntryCodeOffset));
if (Code::RemoveTypeFromFlags(code->flags()) == flags) {
return code;
« no previous file with comments | « src/ic/ic.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698