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

Side by Side Diff: runtime/vm/object.cc

Issue 1400393002: Use offset and count to request slices of lists, maps, and typed_data. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: code review Created 5 years, 2 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 unified diff | Download patch
« no previous file with comments | « runtime/vm/json_stream.cc ('k') | runtime/vm/service.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 #include "vm/object.h" 5 #include "vm/object.h"
6 6
7 #include "include/dart_api.h" 7 #include "include/dart_api.h"
8 #include "platform/assert.h" 8 #include "platform/assert.h"
9 #include "vm/assembler.h" 9 #include "vm/assembler.h"
10 #include "vm/cpu.h" 10 #include "vm/cpu.h"
(...skipping 20068 matching lines...) Expand 10 before | Expand all | Expand 10 after
20079 20079
20080 void Array::PrintJSONImpl(JSONStream* stream, bool ref) const { 20080 void Array::PrintJSONImpl(JSONStream* stream, bool ref) const {
20081 JSONObject jsobj(stream); 20081 JSONObject jsobj(stream);
20082 PrintSharedInstanceJSON(&jsobj, ref); 20082 PrintSharedInstanceJSON(&jsobj, ref);
20083 jsobj.AddProperty("kind", "List"); 20083 jsobj.AddProperty("kind", "List");
20084 jsobj.AddServiceId(*this); 20084 jsobj.AddServiceId(*this);
20085 jsobj.AddProperty("length", Length()); 20085 jsobj.AddProperty("length", Length());
20086 if (ref) { 20086 if (ref) {
20087 return; 20087 return;
20088 } 20088 }
20089 intptr_t offset;
20090 intptr_t count;
20091 stream->ComputeOffsetAndCount(Length(), &offset, &count);
20092 if (offset > 0) {
20093 jsobj.AddProperty("offset", offset);
20094 }
20095 if (count < Length()) {
20096 jsobj.AddProperty("count", count);
20097 }
20098 intptr_t limit = offset + count;
20099 ASSERT(limit <= Length());
20089 { 20100 {
20090 JSONArray jsarr(&jsobj, "elements"); 20101 JSONArray jsarr(&jsobj, "elements");
20091 Object& element = Object::Handle(); 20102 Object& element = Object::Handle();
20092 for (intptr_t index = 0; index < Length(); index++) { 20103 for (intptr_t index = offset; index < limit; index++) {
20093 element = At(index); 20104 element = At(index);
20094 jsarr.AddValue(element); 20105 jsarr.AddValue(element);
20095 } 20106 }
20096 } 20107 }
20097 } 20108 }
20098 20109
20099 20110
20100 RawArray* Array::Grow(const Array& source, 20111 RawArray* Array::Grow(const Array& source,
20101 intptr_t new_length, 20112 intptr_t new_length,
20102 Heap::Space space) { 20113 Heap::Space space) {
(...skipping 214 matching lines...) Expand 10 before | Expand all | Expand 10 after
20317 void GrowableObjectArray::PrintJSONImpl(JSONStream* stream, 20328 void GrowableObjectArray::PrintJSONImpl(JSONStream* stream,
20318 bool ref) const { 20329 bool ref) const {
20319 JSONObject jsobj(stream); 20330 JSONObject jsobj(stream);
20320 PrintSharedInstanceJSON(&jsobj, ref); 20331 PrintSharedInstanceJSON(&jsobj, ref);
20321 jsobj.AddProperty("kind", "List"); 20332 jsobj.AddProperty("kind", "List");
20322 jsobj.AddServiceId(*this); 20333 jsobj.AddServiceId(*this);
20323 jsobj.AddProperty("length", Length()); 20334 jsobj.AddProperty("length", Length());
20324 if (ref) { 20335 if (ref) {
20325 return; 20336 return;
20326 } 20337 }
20338 intptr_t offset;
20339 intptr_t count;
20340 stream->ComputeOffsetAndCount(Length(), &offset, &count);
20341 if (offset > 0) {
20342 jsobj.AddProperty("offset", offset);
20343 }
20344 if (count < Length()) {
20345 jsobj.AddProperty("count", count);
20346 }
20347 intptr_t limit = offset + count;
20348 ASSERT(limit <= Length());
20327 { 20349 {
20328 JSONArray jsarr(&jsobj, "elements"); 20350 JSONArray jsarr(&jsobj, "elements");
20329 Object& element = Object::Handle(); 20351 Object& element = Object::Handle();
20330 for (intptr_t index = 0; index < Length(); index++) { 20352 for (intptr_t index = offset; index < limit; index++) {
20331 element = At(index); 20353 element = At(index);
20332 jsarr.AddValue(element); 20354 jsarr.AddValue(element);
20333 } 20355 }
20334 } 20356 }
20335 } 20357 }
20336 20358
20337 20359
20338 // Equivalent to Dart's operator "==" and hashCode. 20360 // Equivalent to Dart's operator "==" and hashCode.
20339 class DefaultHashTraits { 20361 class DefaultHashTraits {
20340 public: 20362 public:
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
20423 20445
20424 void LinkedHashMap::PrintJSONImpl(JSONStream* stream, bool ref) const { 20446 void LinkedHashMap::PrintJSONImpl(JSONStream* stream, bool ref) const {
20425 JSONObject jsobj(stream); 20447 JSONObject jsobj(stream);
20426 PrintSharedInstanceJSON(&jsobj, ref); 20448 PrintSharedInstanceJSON(&jsobj, ref);
20427 jsobj.AddProperty("kind", "Map"); 20449 jsobj.AddProperty("kind", "Map");
20428 jsobj.AddServiceId(*this); 20450 jsobj.AddServiceId(*this);
20429 jsobj.AddProperty("length", Length()); 20451 jsobj.AddProperty("length", Length());
20430 if (ref) { 20452 if (ref) {
20431 return; 20453 return;
20432 } 20454 }
20455 intptr_t offset;
20456 intptr_t count;
20457 stream->ComputeOffsetAndCount(Length(), &offset, &count);
20458 if (offset > 0) {
20459 jsobj.AddProperty("offset", offset);
20460 }
20461 if (count < Length()) {
20462 jsobj.AddProperty("count", count);
20463 }
20464 intptr_t limit = offset + count;
20465 ASSERT(limit <= Length());
20433 { 20466 {
20434 JSONArray jsarr(&jsobj, "associations"); 20467 JSONArray jsarr(&jsobj, "associations");
20435 Object& object = Object::Handle(); 20468 Object& object = Object::Handle();
20436 LinkedHashMap::Iterator iterator(*this); 20469 LinkedHashMap::Iterator iterator(*this);
20437 while (iterator.MoveNext()) { 20470 int i = 0;
20438 JSONObject jsassoc(&jsarr); 20471 while (iterator.MoveNext() && i < limit) {
20439 object = iterator.CurrentKey(); 20472 if (i >= offset) {
20440 jsassoc.AddProperty("key", object); 20473 JSONObject jsassoc(&jsarr);
20441 object = iterator.CurrentValue(); 20474 object = iterator.CurrentKey();
20442 jsassoc.AddProperty("value", object); 20475 jsassoc.AddProperty("key", object);
20476 object = iterator.CurrentValue();
20477 jsassoc.AddProperty("value", object);
20478 }
20479 i++;
20443 } 20480 }
20444 } 20481 }
20445 } 20482 }
20446 20483
20447 20484
20448 RawFloat32x4* Float32x4::New(float v0, float v1, float v2, float v3, 20485 RawFloat32x4* Float32x4::New(float v0, float v1, float v2, float v3,
20449 Heap::Space space) { 20486 Heap::Space space) {
20450 ASSERT(Isolate::Current()->object_store()->float32x4_class() != 20487 ASSERT(Isolate::Current()->object_store()->float32x4_class() !=
20451 Class::null()); 20488 Class::null());
20452 Float32x4& result = Float32x4::Handle(); 20489 Float32x4& result = Float32x4::Handle();
(...skipping 371 matching lines...) Expand 10 before | Expand all | Expand 10 after
20824 JSONObject jsobj(stream); 20861 JSONObject jsobj(stream);
20825 PrintSharedInstanceJSON(&jsobj, ref); 20862 PrintSharedInstanceJSON(&jsobj, ref);
20826 const Class& cls = Class::Handle(clazz()); 20863 const Class& cls = Class::Handle(clazz());
20827 const String& kind = String::Handle(cls.UserVisibleName()); 20864 const String& kind = String::Handle(cls.UserVisibleName());
20828 jsobj.AddProperty("kind", kind.ToCString()); 20865 jsobj.AddProperty("kind", kind.ToCString());
20829 jsobj.AddServiceId(*this); 20866 jsobj.AddServiceId(*this);
20830 jsobj.AddProperty("length", Length()); 20867 jsobj.AddProperty("length", Length());
20831 if (ref) { 20868 if (ref) {
20832 return; 20869 return;
20833 } 20870 }
20834 20871 intptr_t offset;
20835 { 20872 intptr_t count;
20873 stream->ComputeOffsetAndCount(Length(), &offset, &count);
20874 if (offset > 0) {
20875 jsobj.AddProperty("offset", offset);
20876 }
20877 if (count < Length()) {
20878 jsobj.AddProperty("count", count);
20879 }
20880 if (count == 0) {
20881 jsobj.AddProperty("bytes", "");
20882 } else {
20836 NoSafepointScope no_safepoint; 20883 NoSafepointScope no_safepoint;
20837 jsobj.AddPropertyBase64("bytes", 20884 jsobj.AddPropertyBase64("bytes",
20838 reinterpret_cast<const uint8_t*>(DataAddr(0)), 20885 reinterpret_cast<const uint8_t*>(
20839 LengthInBytes()); 20886 DataAddr(offset * ElementSizeInBytes())),
20887 count * ElementSizeInBytes());
20840 } 20888 }
20841 } 20889 }
20842 20890
20843 20891
20844 FinalizablePersistentHandle* ExternalTypedData::AddFinalizer( 20892 FinalizablePersistentHandle* ExternalTypedData::AddFinalizer(
20845 void* peer, Dart_WeakPersistentHandleFinalizer callback) const { 20893 void* peer, Dart_WeakPersistentHandleFinalizer callback) const {
20846 return dart::AddFinalizer(*this, peer, callback); 20894 return dart::AddFinalizer(*this, peer, callback);
20847 } 20895 }
20848 20896
20849 20897
(...skipping 25 matching lines...) Expand all
20875 JSONObject jsobj(stream); 20923 JSONObject jsobj(stream);
20876 PrintSharedInstanceJSON(&jsobj, ref); 20924 PrintSharedInstanceJSON(&jsobj, ref);
20877 const Class& cls = Class::Handle(clazz()); 20925 const Class& cls = Class::Handle(clazz());
20878 const String& kind = String::Handle(cls.UserVisibleName()); 20926 const String& kind = String::Handle(cls.UserVisibleName());
20879 jsobj.AddProperty("kind", kind.ToCString()); 20927 jsobj.AddProperty("kind", kind.ToCString());
20880 jsobj.AddServiceId(*this); 20928 jsobj.AddServiceId(*this);
20881 jsobj.AddProperty("length", Length()); 20929 jsobj.AddProperty("length", Length());
20882 if (ref) { 20930 if (ref) {
20883 return; 20931 return;
20884 } 20932 }
20885 20933 intptr_t offset;
20886 { 20934 intptr_t count;
20935 stream->ComputeOffsetAndCount(Length(), &offset, &count);
20936 if (offset > 0) {
20937 jsobj.AddProperty("offset", offset);
20938 }
20939 if (count < Length()) {
20940 jsobj.AddProperty("count", count);
20941 }
20942 if (count == 0) {
20943 jsobj.AddProperty("bytes", "");
20944 } else {
20887 NoSafepointScope no_safepoint; 20945 NoSafepointScope no_safepoint;
20888 jsobj.AddPropertyBase64("bytes", 20946 jsobj.AddPropertyBase64("bytes",
20889 reinterpret_cast<const uint8_t*>(DataAddr(0)), 20947 reinterpret_cast<const uint8_t*>(
20890 LengthInBytes()); 20948 DataAddr(offset * ElementSizeInBytes())),
20949 count * ElementSizeInBytes());
20891 } 20950 }
20892 } 20951 }
20893 20952
20894 20953
20895 RawCapability* Capability::New(uint64_t id, Heap::Space space) { 20954 RawCapability* Capability::New(uint64_t id, Heap::Space space) {
20896 Capability& result = Capability::Handle(); 20955 Capability& result = Capability::Handle();
20897 { 20956 {
20898 RawObject* raw = Object::Allocate(Capability::kClassId, 20957 RawObject* raw = Object::Allocate(Capability::kClassId,
20899 Capability::InstanceSize(), 20958 Capability::InstanceSize(),
20900 space); 20959 space);
(...skipping 671 matching lines...) Expand 10 before | Expand all | Expand 10 after
21572 return tag_label.ToCString(); 21631 return tag_label.ToCString();
21573 } 21632 }
21574 21633
21575 21634
21576 void UserTag::PrintJSONImpl(JSONStream* stream, bool ref) const { 21635 void UserTag::PrintJSONImpl(JSONStream* stream, bool ref) const {
21577 Instance::PrintJSONImpl(stream, ref); 21636 Instance::PrintJSONImpl(stream, ref);
21578 } 21637 }
21579 21638
21580 21639
21581 } // namespace dart 21640 } // namespace dart
OLDNEW
« no previous file with comments | « runtime/vm/json_stream.cc ('k') | runtime/vm/service.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698