| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
1 parent b620f5f commit 912eb30
5 files changed
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -3324,6 +3324,29 @@ reader.read().then(({ value, done }) => { | |||
| 3324 | 3324 | }); | |
| 3325 | 3325 | ``` | |
| 3326 | 3326 | ||
| 3327 | + ### `stream.getDefaultHighWaterMark(objectMode)` | ||
| 3328 | + | ||
| 3329 | + <!-- YAML | ||
| 3330 | + added: REPLACEME | ||
| 3331 | + --> | ||
| 3332 | + | ||
| 3333 | + * {boolean} objectMode | ||
| 3334 | + * Returns: {integer} | ||
| 3335 | + | ||
| 3336 | + Returns the default highWaterMark used by streams. | ||
| 3337 | + Defaults to `16384` (16 KiB), or `16` for `objectMode`. | ||
| 3338 | + | ||
| 3339 | + ### `stream.setDefaultHighWaterMark(objectMode, value)` | ||
| 3340 | + | ||
| 3341 | + <!-- YAML | ||
| 3342 | + added: REPLACEME | ||
| 3343 | + --> | ||
| 3344 | + | ||
| 3345 | + * {boolean} objectMode | ||
| 3346 | + * {integer} highWaterMark value | ||
| 3347 | + | ||
| 3348 | + Sets the default highWaterMark used by streams. | ||
| 3349 | + | ||
| 3327 | 3350 | ## API for stream implementers | |
| 3328 | 3351 | ||
| 3329 | 3352 | <!--type=misc--> | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -81,12 +81,11 @@ let debug = require('internal/util/debuglog').debuglog('http', (fn) => { | |||
| 81 | 81 | debug = fn; | |
| 82 | 82 | }); | |
| 83 | 83 | ||
| 84 | - const HIGH_WATER_MARK = getDefaultHighWaterMark(); | ||
| 85 | - | ||
| 86 | 84 | const kCorked = Symbol('corked'); | |
| 87 | 85 | const kUniqueHeaders = Symbol('kUniqueHeaders'); | |
| 88 | 86 | const kBytesWritten = Symbol('kBytesWritten'); | |
| 89 | 87 | const kErrored = Symbol('errored'); | |
| 88 | + const kHighWaterMark = Symbol('kHighWaterMark'); | ||
| 90 | 89 | ||
| 91 | 90 | const nop = () => {}; | |
| 92 | 91 | ||
@@ -151,6 +150,7 @@ function OutgoingMessage() { | |||
| 151 | 150 | this._onPendingData = nop; | |
| 152 | 151 | ||
| 153 | 152 | this[kErrored] = null; | |
| 153 | + this[kHighWaterMark] = getDefaultHighWaterMark(); | ||
| 154 | 154 | } | |
| 155 | 155 | ObjectSetPrototypeOf(OutgoingMessage.prototype, Stream.prototype); | |
| 156 | 156 | ObjectSetPrototypeOf(OutgoingMessage, Stream); | |
@@ -197,7 +197,7 @@ ObjectDefineProperty(OutgoingMessage.prototype, 'writableLength', { | |||
| 197 | 197 | ObjectDefineProperty(OutgoingMessage.prototype, 'writableHighWaterMark', { | |
| 198 | 198 | __proto__: null, | |
| 199 | 199 | get() { | |
| 200 | - return this.socket ? this.socket.writableHighWaterMark : HIGH_WATER_MARK; | ||
| 200 | + return this.socket ? this.socket.writableHighWaterMark : this[kHighWaterMark]; | ||
| 201 | 201 | }, | |
| 202 | 202 | }); | |
| 203 | 203 | ||
@@ -404,7 +404,7 @@ function _writeRaw(data, encoding, callback, size) { | |||
| 404 | 404 | this.outputData.push({ data, encoding, callback }); | |
| 405 | 405 | this.outputSize += data.length; | |
| 406 | 406 | this._onPendingData(data.length); | |
| 407 | - return this.outputSize < HIGH_WATER_MARK; | ||
| 407 | + return this.outputSize < this[kHighWaterMark]; | ||
| 408 | 408 | } | |
| 409 | 409 | ||
| 410 | 410 | ||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -4,16 +4,29 @@ const { | |||
| 4 | 4 | MathFloor, | |
| 5 | 5 | NumberIsInteger, | |
| 6 | 6 | } = primordials; | |
| 7 | + const { validateInteger } = require('internal/validators'); | ||
| 7 | 8 | ||
| 8 | 9 | const { ERR_INVALID_ARG_VALUE } = require('internal/errors').codes; | |
| 9 | 10 | ||
| 11 | + let defaultHighWaterMarkBytes = 16 * 1024; | ||
| 12 | + let defaultHighWaterMarkObjectMode = 16; | ||
| 13 | + | ||
| 10 | 14 | function highWaterMarkFrom(options, isDuplex, duplexKey) { | |
| 11 | 15 | return options.highWaterMark != null ? options.highWaterMark : | |
| 12 | 16 | isDuplex ? options[duplexKey] : null; | |
| 13 | 17 | } | |
| 14 | 18 | ||
| 15 | 19 | function getDefaultHighWaterMark(objectMode) { | |
| 16 | - return objectMode ? 16 : 16 * 1024; | ||
| 20 | + return objectMode ? defaultHighWaterMarkObjectMode : defaultHighWaterMarkBytes; | ||
| 21 | + } | ||
| 22 | + | ||
| 23 | + function setDefaultHighWaterMark(objectMode, value) { | ||
| 24 | + validateInteger(value, 'value', 0); | ||
| 25 | + if (objectMode) { | ||
| 26 | + defaultHighWaterMarkObjectMode = value; | ||
| 27 | + } else { | ||
| 28 | + defaultHighWaterMarkBytes = value; | ||
| 29 | + } | ||
| 17 | 30 | } | |
| 18 | 31 | ||
| 19 | 32 | function getHighWaterMark(state, options, duplexKey, isDuplex) { | |
@@ -33,4 +46,5 @@ function getHighWaterMark(state, options, duplexKey, isDuplex) { | |||
| 33 | 46 | module.exports = { | |
| 34 | 47 | getHighWaterMark, | |
| 35 | 48 | getDefaultHighWaterMark, | |
| 49 | + setDefaultHighWaterMark, | ||
| 36 | 50 | }; | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -42,6 +42,7 @@ const { | |||
| 42 | 42 | }, | |
| 43 | 43 | } = require('internal/errors'); | |
| 44 | 44 | const compose = require('internal/streams/compose'); | |
| 45 | + const { setDefaultHighWaterMark, getDefaultHighWaterMark } = require('internal/streams/state'); | ||
| 45 | 46 | const { pipeline } = require('internal/streams/pipeline'); | |
| 46 | 47 | const { destroyer } = require('internal/streams/destroy'); | |
| 47 | 48 | const eos = require('internal/streams/end-of-stream'); | |
@@ -105,6 +106,8 @@ Stream.addAbortSignal = addAbortSignal; | |||
| 105 | 106 | Stream.finished = eos; | |
| 106 | 107 | Stream.destroy = destroyer; | |
| 107 | 108 | Stream.compose = compose; | |
| 109 | + Stream.setDefaultHighWaterMark = setDefaultHighWaterMark; | ||
| 110 | + Stream.getDefaultHighWaterMark = getDefaultHighWaterMark; | ||
| 108 | 111 | ||
| 109 | 112 | ObjectDefineProperty(Stream, 'promises', { | |
| 110 | 113 | __proto__: null, | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -0,0 +1,36 @@ | |||
| 1 | + 'use strict'; | ||
| 2 | + | ||
| 3 | + require('../common'); | ||
| 4 | + | ||
| 5 | + const assert = require('node:assert'); | ||
| 6 | + const { | ||
| 7 | + setDefaultHighWaterMark, | ||
| 8 | + getDefaultHighWaterMark, | ||
| 9 | + Writable, | ||
| 10 | + Readable, | ||
| 11 | + Transform | ||
| 12 | + } = require('stream'); | ||
| 13 | + | ||
| 14 | + assert.notStrictEqual(getDefaultHighWaterMark(false), 32 * 1000); | ||
| 15 | + setDefaultHighWaterMark(false, 32 * 1000); | ||
| 16 | + assert.strictEqual(getDefaultHighWaterMark(false), 32 * 1000); | ||
| 17 | + | ||
| 18 | + assert.notStrictEqual(getDefaultHighWaterMark(true), 32); | ||
| 19 | + setDefaultHighWaterMark(true, 32); | ||
| 20 | + assert.strictEqual(getDefaultHighWaterMark(true), 32); | ||
| 21 | + | ||
| 22 | + const w = new Writable({ | ||
| 23 | + write() {} | ||
| 24 | + }); | ||
| 25 | + assert.strictEqual(w.writableHighWaterMark, 32 * 1000); | ||
| 26 | + | ||
| 27 | + const r = new Readable({ | ||
| 28 | + read() {} | ||
| 29 | + }); | ||
| 30 | + assert.strictEqual(r.readableHighWaterMark, 32 * 1000); | ||
| 31 | + | ||
| 32 | + const t = new Transform({ | ||
| 33 | + transform() {} | ||
| 34 | + }); | ||
| 35 | + assert.strictEqual(t.writableHighWaterMark, 32 * 1000); | ||
| 36 | + assert.strictEqual(t.readableHighWaterMark, 32 * 1000); | ||
| Back | FazBrowse Home | New Git URL |
0 commit comments