浏览代码

Use LocalVector for RingBuffer

Updated RingBuffer to use LocalVector instead of Vector, to avoid _copy_on_write overhead when writing to the buffer.
aaronp64 2 月之前
父节点
当前提交
2a02cabe4d
共有 1 个文件被更改,包括 5 次插入5 次删除
  1. 5 5
      core/templates/ring_buffer.h

+ 5 - 5
core/templates/ring_buffer.h

@@ -30,11 +30,11 @@
 
 
 #pragma once
 #pragma once
 
 
-#include "core/templates/vector.h"
+#include "core/templates/local_vector.h"
 
 
 template <typename T>
 template <typename T>
 class RingBuffer {
 class RingBuffer {
-	Vector<T> data;
+	LocalVector<T> data;
 	int read_pos = 0;
 	int read_pos = 0;
 	int write_pos = 0;
 	int write_pos = 0;
 	int size_mask;
 	int size_mask;
@@ -142,7 +142,7 @@ public:
 
 
 	Error write(const T &p_v) {
 	Error write(const T &p_v) {
 		ERR_FAIL_COND_V(space_left() < 1, FAILED);
 		ERR_FAIL_COND_V(space_left() < 1, FAILED);
-		data.write[inc(write_pos, 1)] = p_v;
+		data[inc(write_pos, 1)] = p_v;
 		return OK;
 		return OK;
 	}
 	}
 
 
@@ -159,7 +159,7 @@ public:
 			int total = end - pos;
 			int total = end - pos;
 
 
 			for (int i = 0; i < total; i++) {
 			for (int i = 0; i < total; i++) {
-				data.write[pos + i] = p_buf[src++];
+				data[pos + i] = p_buf[src++];
 			}
 			}
 			to_write -= total;
 			to_write -= total;
 			pos = 0;
 			pos = 0;
@@ -199,7 +199,7 @@ public:
 		data.resize(int64_t(1) << int64_t(p_power));
 		data.resize(int64_t(1) << int64_t(p_power));
 		if (old_size < new_size && read_pos > write_pos) {
 		if (old_size < new_size && read_pos > write_pos) {
 			for (int i = 0; i < write_pos; i++) {
 			for (int i = 0; i < write_pos; i++) {
-				data.write[(old_size + i) & mask] = data[i];
+				data[(old_size + i) & mask] = data[i];
 			}
 			}
 			write_pos = (old_size + write_pos) & mask;
 			write_pos = (old_size + write_pos) & mask;
 		} else {
 		} else {