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

Unified Diff: runtime/vm/parser.h

Issue 2147493005: Remove per-isolate compile-time constants cache. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 4 years, 5 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 | « runtime/vm/object_store.cc ('k') | runtime/vm/parser.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/vm/parser.h
diff --git a/runtime/vm/parser.h b/runtime/vm/parser.h
index 7798edb2cbcbe2c094d71e7298a7f91368affe17..e29f86e05a78aa50a544f8c1e51c22ab419558a6 100644
--- a/runtime/vm/parser.h
+++ b/runtime/vm/parser.h
@@ -44,81 +44,10 @@ class RecursionChecker;
// background compilation, we are not able to evaluate the constants
// so this cache is necessary to support background compilation.
//
-// There are two places a constant can be cached, depending on whether
-// the script is in the vm heap (snapshot) or not.
-//
-// When a script is in the vm heap, we are not able to cache the
-// constants on the script itself (it is read-only) so we cache them
-// in a per-isolate shared map in the object store. In this case the
-// map key is a pair (array) with 2 elements:
-//
-// - key[0] contains the canonicalized url of the script.
-// - key[1] contains the token position of the constant in the script.
-//
-// The VMConstantsMap type is used to implement this per-isolate map.
-//
-// When a script is not in the vm heap, we cache the constants with
-// the script itself. This is helpful during isolate reloading, as it
-// allows us to reference the compile time constants associated with a
-// particular version of a script. In this case the map key is simply
-// the TokenPosition where the constant is defined.
-//
-// The ConstantsMap type is used to implement this per-script map.
-
-// The key for the per-isolate compile time constants map. By using a
-// ValueObject we are able to look up a constant without allocating a
-// key pair (array).
-// The per-script compile-time constants map.
-struct UrlAndPosKey : ValueObject {
- UrlAndPosKey(const String& url, TokenPosition pos)
- : script_url(url), token_pos(pos) { }
- const String& script_url;
- TokenPosition token_pos;
-};
-
-// The per-isolate compile-time constants map.
-class VMConstMapKeyEqualsTraits {
- public:
- static const char* Name() { return "VMConstMapKeyEqualsTraits"; }
- static bool ReportStats() { return false; }
-
- static bool IsMatch(const Object& a, const Object& b) {
- const Array& key1 = Array::Cast(a);
- const Array& key2 = Array::Cast(b);
- // Compare raw strings of script url symbol and raw smi of token positon.
- return (key1.At(0) == key2.At(0)) && (key1.At(1) == key2.At(1));
- }
- static bool IsMatch(const UrlAndPosKey& key1, const Object& b) {
- const Array& key2 = Array::Cast(b);
- // Compare raw strings of script url symbol and token positon.
- return (key1.script_url.raw() == key2.At(0))
- && (key1.token_pos.value() == Smi::Value(Smi::RawCast(key2.At(1))));
- }
- static uword Hash(const Object& obj) {
- const Array& key = Array::Cast(obj);
- intptr_t url_hash = String::HashRawSymbol(String::RawCast(key.At(0)));
- intptr_t pos = Smi::Value(Smi::RawCast(key.At(1)));
- return HashValue(url_hash, pos);
- }
- static uword Hash(const UrlAndPosKey& key) {
- return HashValue(String::HashRawSymbol(key.script_url.raw()),
- key.token_pos.value());
- }
- // Used by CacheConstantValue if a new constant is added to the map.
- static RawObject* NewKey(const UrlAndPosKey& key) {
- const Array& key_obj = Array::Handle(Array::New(2));
- key_obj.SetAt(0, key.script_url);
- key_obj.SetAt(1, Smi::Handle(Smi::New(key.token_pos.value())));
- return key_obj.raw();;
- }
-
- private:
- static uword HashValue(intptr_t url_hash, intptr_t pos) {
- return url_hash * pos % (Smi::kMaxValue - 13);
- }
-};
-typedef UnorderedHashMap<VMConstMapKeyEqualsTraits> VMConstantsMap;
-
+// We cache the constants with the script itself. This is helpful during isolate
+// reloading, as it allows us to reference the compile time constants associated
+// with a particular version of a script. The map key is simply the
+// TokenPosition where the constant is defined.
class ConstMapKeyEqualsTraits {
public:
static const char* Name() { return "ConstMapKeyEqualsTraits"; }
« no previous file with comments | « runtime/vm/object_store.cc ('k') | runtime/vm/parser.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698