summaryrefslogtreecommitdiff
path: root/js
diff options
context:
space:
mode:
Diffstat (limited to 'js')
-rw-r--r--js/deno.ts1
-rw-r--r--js/dispatch.ts3
-rw-r--r--js/trace.ts80
-rw-r--r--js/trace_test.ts82
-rw-r--r--js/unit_tests.ts1
5 files changed, 0 insertions, 167 deletions
diff --git a/js/deno.ts b/js/deno.ts
index 84b6b14b8..8a6b627b6 100644
--- a/js/deno.ts
+++ b/js/deno.ts
@@ -34,7 +34,6 @@ export { writeFileSync, writeFile } from "./write_file";
export { ErrorKind, DenoError } from "./errors";
export { libdeno } from "./libdeno";
export { platform } from "./platform";
-export { trace } from "./trace";
export { truncateSync, truncate } from "./truncate";
export { FileInfo } from "./file_info";
export { connect, dial, listen, Listener, Conn } from "./net";
diff --git a/js/dispatch.ts b/js/dispatch.ts
index d416264bd..b27e5e1b5 100644
--- a/js/dispatch.ts
+++ b/js/dispatch.ts
@@ -4,7 +4,6 @@ import * as flatbuffers from "./flatbuffers";
import * as msg from "gen/msg_generated";
import * as errors from "./errors";
import * as util from "./util";
-import { maybePushTrace } from "./trace";
let nextCmdId = 0;
const promiseTable = new Map<number, util.Resolvable<msg.Base>>();
@@ -43,7 +42,6 @@ export function sendAsync(
inner: flatbuffers.Offset,
data?: ArrayBufferView
): Promise<msg.Base> {
- maybePushTrace(innerType, false); // add to trace if tracing
const [cmdId, resBuf] = sendInternal(builder, innerType, inner, data, false);
util.assert(resBuf == null);
const promise = util.createResolvable<msg.Base>();
@@ -58,7 +56,6 @@ export function sendSync(
inner: flatbuffers.Offset,
data?: ArrayBufferView
): null | msg.Base {
- maybePushTrace(innerType, true); // add to trace if tracing
const [cmdId, resBuf] = sendInternal(builder, innerType, inner, data, true);
util.assert(cmdId >= 0);
if (resBuf == null) {
diff --git a/js/trace.ts b/js/trace.ts
deleted file mode 100644
index 104d048de..000000000
--- a/js/trace.ts
+++ /dev/null
@@ -1,80 +0,0 @@
-// Copyright 2018 the Deno authors. All rights reserved. MIT license.
-import * as msg from "gen/msg_generated";
-
-export interface TraceInfo {
- sync: boolean; // is synchronous call
- name: string; // name of operation
-}
-
-interface TraceStackNode {
- list: TraceInfo[];
- prev: TraceStackNode | null;
-}
-
-let current: TraceStackNode | null = null;
-
-// Push a new list to trace stack
-function pushStack(): void {
- if (current === null) {
- current = { list: [], prev: null };
- } else {
- const newStack = { list: [], prev: current };
- current = newStack;
- }
-}
-
-// Pop from trace stack and (if possible) concat to parent trace stack node
-function popStack(): TraceInfo[] {
- if (current === null) {
- throw new Error("trace list stack should not be empty");
- }
- const resultList = current!.list;
- if (!!current!.prev) {
- const prev = current!.prev!;
- // concat inner results to outer stack
- prev.list = prev.list.concat(resultList);
- current = prev;
- } else {
- current = null;
- }
- return resultList;
-}
-
-// Push to trace stack if we are tracing
-// @internal
-export function maybePushTrace(op: msg.Any, sync: boolean): void {
- if (current === null) {
- return; // no trace requested
- }
- // Freeze the object, avoid tampering
- current!.list.push(
- Object.freeze({
- sync,
- name: msg.Any[op] // convert to enum names
- })
- );
-}
-
-/** Trace privileged operations executed inside a given function or promise.
- *
- * _Notice:_ To capture every operation in asynchronous `deno.*` calls,
- * you might want to put them in functions instead of directly invoking.
- *
- * import { trace, mkdir } from "deno";
- *
- * const ops = await trace(async () => {
- * await mkdir("my_dir");
- * });
- */
-export async function trace(
- // tslint:disable-next-line:no-any
- fnOrPromise: Function | Promise<any>
-): Promise<TraceInfo[]> {
- pushStack();
- if (typeof fnOrPromise === "function") {
- await fnOrPromise();
- } else {
- await fnOrPromise;
- }
- return popStack();
-}
diff --git a/js/trace_test.ts b/js/trace_test.ts
deleted file mode 100644
index bbfc9f23c..000000000
--- a/js/trace_test.ts
+++ /dev/null
@@ -1,82 +0,0 @@
-// Copyright 2018 the Deno authors. All rights reserved. MIT license.
-import { testPerm, assertEqual } from "./test_util.ts";
-import * as deno from "deno";
-
-testPerm({ write: true }, async function traceFunctionSuccess() {
- const op = await deno.trace(async () => {
- const enc = new TextEncoder();
- const data = enc.encode("Hello");
- // Mixing sync and async calls
- const filename = deno.makeTempDirSync() + "/test.txt";
- await deno.writeFile(filename, data, 0o666);
- deno.removeSync(filename);
- });
- assertEqual(op.length, 3);
- assertEqual(op[0], { sync: true, name: "MakeTempDir" });
- assertEqual(op[1], { sync: false, name: "WriteFile" });
- assertEqual(op[2], { sync: true, name: "Remove" });
-});
-
-testPerm({ write: true }, async function tracePromiseSuccess() {
- // Ensure we don't miss any send actions
- // (new Promise(fn), fn runs synchronously)
- const asyncFunction = async () => {
- const enc = new TextEncoder();
- const data = enc.encode("Hello");
- // Mixing sync and async calls
- const filename = deno.makeTempDirSync() + "/test.txt";
- await deno.writeFile(filename, data, 0o666);
- deno.removeSync(filename);
- };
- const promise = Promise.resolve().then(asyncFunction);
- const op = await deno.trace(promise);
- assertEqual(op.length, 3);
- assertEqual(op[0], { sync: true, name: "MakeTempDir" });
- assertEqual(op[1], { sync: false, name: "WriteFile" });
- assertEqual(op[2], { sync: true, name: "Remove" });
-});
-
-testPerm({ write: true }, async function traceRepeatSuccess() {
- const op1 = await deno.trace(async () => await deno.makeTempDir());
- assertEqual(op1.length, 1);
- assertEqual(op1[0], { sync: false, name: "MakeTempDir" });
- const op2 = await deno.trace(() => deno.statSync("."));
- assertEqual(op2.length, 1);
- assertEqual(op2[0], { sync: true, name: "Stat" });
-});
-
-testPerm({ write: true }, async function traceIdempotence() {
- let op1, op2, op3;
- op1 = await deno.trace(async () => {
- const filename = (await deno.makeTempDir()) + "/test.txt";
- op2 = await deno.trace(async () => {
- const enc = new TextEncoder();
- const data = enc.encode("Hello");
- deno.writeFileSync(filename, data, 0o666);
- op3 = await deno.trace(async () => {
- await deno.remove(filename);
- });
- await deno.makeTempDir();
- });
- });
-
- // Flatten the calls
- assertEqual(op1.length, 4);
- assertEqual(op1[0], { sync: false, name: "MakeTempDir" });
- assertEqual(op1[1], { sync: true, name: "WriteFile" });
- assertEqual(op1[2], { sync: false, name: "Remove" });
- assertEqual(op1[3], { sync: false, name: "MakeTempDir" });
-
- assertEqual(op2.length, 3);
- assertEqual(op2[0], { sync: true, name: "WriteFile" });
- assertEqual(op2[1], { sync: false, name: "Remove" });
- assertEqual(op2[2], { sync: false, name: "MakeTempDir" });
-
- assertEqual(op3.length, 1);
- assertEqual(op3[0], { sync: false, name: "Remove" });
-
- // Expect top-level repeat still works after all the nestings
- const op4 = await deno.trace(() => deno.statSync("."));
- assertEqual(op4.length, 1);
- assertEqual(op4[0], { sync: true, name: "Stat" });
-});
diff --git a/js/unit_tests.ts b/js/unit_tests.ts
index 610de02db..392a061cc 100644
--- a/js/unit_tests.ts
+++ b/js/unit_tests.ts
@@ -24,7 +24,6 @@ import "./symlink_test.ts";
import "./platform_test.ts";
import "./text_encoding_test.ts";
import "./net_test.ts";
-import "./trace_test.ts";
import "./truncate_test.ts";
import "./v8_source_maps_test.ts";
import "../website/app_test.js";