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

Side by Side Diff: pkg/analyzer/lib/src/summary/api_signature.dart

Issue 2474993004: Optimize ApiSignature.addBytes() (Closed)
Patch Set: Created 4 years, 1 month 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 | « no previous file | no next file » | 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) 2016, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2016, 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 library analyzer.src.summary.api_signature; 5 library analyzer.src.summary.api_signature;
6 6
7 import 'dart:convert'; 7 import 'dart:convert';
8 import 'dart:typed_data'; 8 import 'dart:typed_data';
9 9
10 import 'package:convert/convert.dart'; 10 import 'package:convert/convert.dart';
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
65 _data.setUint8(_offset, b ? 1 : 0); 65 _data.setUint8(_offset, b ? 1 : 0);
66 _offset++; 66 _offset++;
67 } 67 }
68 68
69 /** 69 /**
70 * Collect a sequence of arbitrary bytes. Note that the length is not 70 * Collect a sequence of arbitrary bytes. Note that the length is not
71 * collected, so for example `addBytes([1, 2]);` will have the same effect as 71 * collected, so for example `addBytes([1, 2]);` will have the same effect as
72 * `addBytes([1]); addBytes([2]);`. 72 * `addBytes([1]); addBytes([2]);`.
73 */ 73 */
74 void addBytes(List<int> bytes) { 74 void addBytes(List<int> bytes) {
75 _makeRoom(bytes.length); 75 int length = bytes.length;
76 new Uint8List.view(_data.buffer) 76 _makeRoom(length);
77 .setRange(_offset, _offset + bytes.length, bytes); 77 for (int i = 0; i < length; i++) {
78 _offset += bytes.length; 78 _data.setUint8(_offset + i, bytes[i]);
79 }
80 _offset += length;
79 } 81 }
80 82
81 /** 83 /**
82 * Collect a double-precision floating point value. 84 * Collect a double-precision floating point value.
83 */ 85 */
84 void addDouble(double d) { 86 void addDouble(double d) {
85 _makeRoom(8); 87 _makeRoom(8);
86 _data.setFloat64(_offset, d, Endianness.LITTLE_ENDIAN); 88 _data.setFloat64(_offset, d, Endianness.LITTLE_ENDIAN);
87 _offset += 8; 89 _offset += 8;
88 } 90 }
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
142 int oldLength = _data.lengthInBytes; 144 int oldLength = _data.lengthInBytes;
143 if (_offset + spaceNeeded > oldLength) { 145 if (_offset + spaceNeeded > oldLength) {
144 int newLength = 2 * (_offset + spaceNeeded); 146 int newLength = 2 * (_offset + spaceNeeded);
145 ByteData newData = new ByteData(newLength); 147 ByteData newData = new ByteData(newLength);
146 new Uint8List.view(newData.buffer) 148 new Uint8List.view(newData.buffer)
147 .setRange(0, oldLength, new Uint8List.view(_data.buffer)); 149 .setRange(0, oldLength, new Uint8List.view(_data.buffer));
148 _data = newData; 150 _data = newData;
149 } 151 }
150 } 152 }
151 } 153 }
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698