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

Side by Side Diff: runtime/vm/raw_object.h

Issue 12093071: - Change the layout of external typed array objects to avoid the extra indirection when accessing e… (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 7 years, 10 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 | Annotate | Revision Log
« no previous file with comments | « runtime/vm/object_test.cc ('k') | runtime/vm/raw_object_snapshot.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 #ifndef VM_RAW_OBJECT_H_ 5 #ifndef VM_RAW_OBJECT_H_
6 #define VM_RAW_OBJECT_H_ 6 #define VM_RAW_OBJECT_H_
7 7
8 #include "platform/assert.h" 8 #include "platform/assert.h"
9 #include "vm/globals.h" 9 #include "vm/globals.h"
10 #include "vm/token.h" 10 #include "vm/token.h"
(...skipping 1385 matching lines...) Expand 10 before | Expand all | Expand 10 after
1396 1396
1397 1397
1398 class RawFloat64Array : public RawByteArray { 1398 class RawFloat64Array : public RawByteArray {
1399 RAW_HEAP_OBJECT_IMPLEMENTATION(Float64Array); 1399 RAW_HEAP_OBJECT_IMPLEMENTATION(Float64Array);
1400 1400
1401 // Variable length data follows here. 1401 // Variable length data follows here.
1402 double data_[0]; 1402 double data_[0];
1403 }; 1403 };
1404 1404
1405 1405
1406 template<typename T>
1407 class ExternalByteArrayData {
1408 public:
1409 static const int kAlignment = 16;
1410
1411 ExternalByteArrayData(T* data,
1412 void* peer,
1413 Dart_PeerFinalizer callback) :
1414 data_(data), peer_(peer), callback_(callback) {
1415 }
1416 ~ExternalByteArrayData() {
1417 if (callback_ != NULL) (*callback_)(peer_);
1418 }
1419
1420 T* data() {
1421 return data_;
1422 }
1423 void* peer() {
1424 return peer_;
1425 }
1426
1427 static intptr_t data_offset() {
1428 return OFFSET_OF(ExternalByteArrayData<T>, data_);
1429 }
1430
1431 private:
1432 T* data_;
1433 void* peer_;
1434 Dart_PeerFinalizer callback_;
1435 };
1436
1437
1438 class RawExternalInt8Array : public RawByteArray { 1406 class RawExternalInt8Array : public RawByteArray {
1439 RAW_HEAP_OBJECT_IMPLEMENTATION(ExternalInt8Array); 1407 RAW_HEAP_OBJECT_IMPLEMENTATION(ExternalInt8Array);
1440 1408
1441 ExternalByteArrayData<int8_t>* external_data_; 1409 int8_t* data_;
1410 void* peer_;
1442 }; 1411 };
1443 1412
1444 1413
1445 class RawExternalUint8Array : public RawByteArray { 1414 class RawExternalUint8Array : public RawByteArray {
1446 RAW_HEAP_OBJECT_IMPLEMENTATION(ExternalUint8Array); 1415 RAW_HEAP_OBJECT_IMPLEMENTATION(ExternalUint8Array);
1447 1416
1448 protected: 1417 uint8_t* data_;
1449 ExternalByteArrayData<uint8_t>* external_data_; 1418 void* peer_;
1450 1419
1451 friend class TokenStream; 1420 friend class TokenStream;
1452 friend class RawTokenStream; 1421 friend class RawTokenStream;
1422 friend class RawExternalUint8ClampedArray;
1453 }; 1423 };
1454 1424
1455 1425
1456 class RawExternalUint8ClampedArray : public RawExternalUint8Array { 1426 class RawExternalUint8ClampedArray : public RawExternalUint8Array {
1457 RAW_HEAP_OBJECT_IMPLEMENTATION(ExternalUint8ClampedArray); 1427 RAW_HEAP_OBJECT_IMPLEMENTATION(ExternalUint8ClampedArray);
1458 }; 1428 };
1459 1429
1460 1430
1461 class RawExternalInt16Array : public RawByteArray { 1431 class RawExternalInt16Array : public RawByteArray {
1462 RAW_HEAP_OBJECT_IMPLEMENTATION(ExternalInt16Array); 1432 RAW_HEAP_OBJECT_IMPLEMENTATION(ExternalInt16Array);
1463 1433
1464 ExternalByteArrayData<int16_t>* external_data_; 1434 int16_t* data_;
1435 void* peer_;
1465 }; 1436 };
1466 1437
1467 1438
1468 class RawExternalUint16Array : public RawByteArray { 1439 class RawExternalUint16Array : public RawByteArray {
1469 RAW_HEAP_OBJECT_IMPLEMENTATION(ExternalUint16Array); 1440 RAW_HEAP_OBJECT_IMPLEMENTATION(ExternalUint16Array);
1470 1441
1471 ExternalByteArrayData<uint16_t>* external_data_; 1442 uint16_t* data_;
1443 void* peer_;
1472 }; 1444 };
1473 1445
1474 1446
1475 class RawExternalInt32Array : public RawByteArray { 1447 class RawExternalInt32Array : public RawByteArray {
1476 RAW_HEAP_OBJECT_IMPLEMENTATION(ExternalInt32Array); 1448 RAW_HEAP_OBJECT_IMPLEMENTATION(ExternalInt32Array);
1477 1449
1478 ExternalByteArrayData<int32_t>* external_data_; 1450 int32_t* data_;
1451 void* peer_;
1479 }; 1452 };
1480 1453
1481 1454
1482 class RawExternalUint32Array : public RawByteArray { 1455 class RawExternalUint32Array : public RawByteArray {
1483 RAW_HEAP_OBJECT_IMPLEMENTATION(ExternalUint32Array); 1456 RAW_HEAP_OBJECT_IMPLEMENTATION(ExternalUint32Array);
1484 1457
1485 ExternalByteArrayData<uint32_t>* external_data_; 1458 uint32_t* data_;
1459 void* peer_;
1486 }; 1460 };
1487 1461
1488 1462
1489 class RawExternalInt64Array : public RawByteArray { 1463 class RawExternalInt64Array : public RawByteArray {
1490 RAW_HEAP_OBJECT_IMPLEMENTATION(ExternalInt64Array); 1464 RAW_HEAP_OBJECT_IMPLEMENTATION(ExternalInt64Array);
1491 1465
1492 ExternalByteArrayData<int64_t>* external_data_; 1466 int64_t* data_;
1467 void* peer_;
1493 }; 1468 };
1494 1469
1495 1470
1496 class RawExternalUint64Array : public RawByteArray { 1471 class RawExternalUint64Array : public RawByteArray {
1497 RAW_HEAP_OBJECT_IMPLEMENTATION(ExternalUint64Array); 1472 RAW_HEAP_OBJECT_IMPLEMENTATION(ExternalUint64Array);
1498 1473
1499 ExternalByteArrayData<uint64_t>* external_data_; 1474 uint64_t* data_;
1475 void* peer_;
1500 }; 1476 };
1501 1477
1502 1478
1503 class RawExternalFloat32Array : public RawByteArray { 1479 class RawExternalFloat32Array : public RawByteArray {
1504 RAW_HEAP_OBJECT_IMPLEMENTATION(ExternalFloat32Array); 1480 RAW_HEAP_OBJECT_IMPLEMENTATION(ExternalFloat32Array);
1505 1481
1506 ExternalByteArrayData<float>* external_data_; 1482 float* data_;
1483 void* peer_;
1507 }; 1484 };
1508 1485
1509 1486
1510 class RawExternalFloat64Array : public RawByteArray { 1487 class RawExternalFloat64Array : public RawByteArray {
1511 RAW_HEAP_OBJECT_IMPLEMENTATION(ExternalFloat64Array); 1488 RAW_HEAP_OBJECT_IMPLEMENTATION(ExternalFloat64Array);
1512 1489
1513 ExternalByteArrayData<double>* external_data_; 1490 double* data_;
1491 void* peer_;
1514 }; 1492 };
1515 1493
1516 1494
1517 class RawDartFunction : public RawInstance { 1495 class RawDartFunction : public RawInstance {
1518 RAW_HEAP_OBJECT_IMPLEMENTATION(DartFunction); 1496 RAW_HEAP_OBJECT_IMPLEMENTATION(DartFunction);
1519 }; 1497 };
1520 1498
1521 1499
1522 // VM type for capturing stacktraces when exceptions are thrown, 1500 // VM type for capturing stacktraces when exceptions are thrown,
1523 // Currently we don't have any interface that this object is supposed 1501 // Currently we don't have any interface that this object is supposed
(...skipping 183 matching lines...) Expand 10 before | Expand all | Expand 10 after
1707 kExternalUint64ArrayCid == kExternalInt8ArrayCid + 8 && 1685 kExternalUint64ArrayCid == kExternalInt8ArrayCid + 8 &&
1708 kExternalFloat32ArrayCid == kExternalInt8ArrayCid + 9 && 1686 kExternalFloat32ArrayCid == kExternalInt8ArrayCid + 9 &&
1709 kExternalFloat64ArrayCid == kExternalInt8ArrayCid + 10 && 1687 kExternalFloat64ArrayCid == kExternalInt8ArrayCid + 10 &&
1710 kStacktraceCid == kExternalInt8ArrayCid + 11); 1688 kStacktraceCid == kExternalInt8ArrayCid + 11);
1711 return (index >= kExternalInt8ArrayCid && index <= kExternalFloat64ArrayCid); 1689 return (index >= kExternalInt8ArrayCid && index <= kExternalFloat64ArrayCid);
1712 } 1690 }
1713 1691
1714 } // namespace dart 1692 } // namespace dart
1715 1693
1716 #endif // VM_RAW_OBJECT_H_ 1694 #endif // VM_RAW_OBJECT_H_
OLDNEW
« no previous file with comments | « runtime/vm/object_test.cc ('k') | runtime/vm/raw_object_snapshot.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698