summaryrefslogtreecommitdiffstats
path: root/gfx/wr/debugger/src/store/index.js
blob: e4c3e4cb3c8c2eaba5f4b9d49267a14ecb6c0975 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
import Vue from "vue";
import Vuex from "vuex";

Vue.use(Vuex);

class Connection {
  constructor() {
    this.ws = null;
  }

  connect(context) {
    var ws = new WebSocket("ws://127.0.0.1:3583");

    ws.onopen = function() {
      context.commit("setConnected", true);
    };

    ws.onmessage = function(evt) {
      var json = JSON.parse(evt.data);
      if (json.kind == "passes") {
        context.commit("setPasses", json.passes);
      } else if (json.kind == "render_tasks") {
        context.commit("setRenderTasks", json.root);
      } else if (json.kind == "documents") {
        context.commit("setDocuments", json.root);
      } else if (json.kind == "clip_scroll_tree") {
        context.commit("setClipScrollTree", json.root);
      } else if (json.kind == "screenshot") {
        context.commit("setScreenshot", json.data);
      } else {
        console.warn("unknown message kind: " + json.kind);
      }
    };

    ws.onclose = function() {
      context.commit("setConnected", false);
    };

    this.ws = ws;
  }

  send(msg) {
    if (this.ws !== null) {
      this.ws.send(msg);
    }
  }

  disconnect() {
    if (this.ws !== null) {
      this.ws.close();
      this.ws = null;
    }
  }
}

var connection = new Connection();

const store = new Vuex.Store({
  strict: true,
  state: {
    connected: false,
    page: "options",
    passes: [],
    render_tasks: [],
    documents: [],
    clip_scroll_tree: [],
    screenshot: [],
  },
  mutations: {
    setConnected(state, connected) {
      state.connected = connected;
    },
    setPage(state, name) {
      state.page = name;
    },
    setPasses(state, passes) {
      state.passes = passes;
    },
    setRenderTasks(state, render_tasks) {
      state.render_tasks = render_tasks;
    },
    setDocuments(state, documents) {
      state.documents = documents;
    },
    setClipScrollTree(state, clip_scroll_tree) {
      state.clip_scroll_tree = clip_scroll_tree;
    },
    setScreenshot(state, screenshot) {
      state.screenshot = screenshot;
    },
  },
  actions: {
    connect(context) {
      connection.connect(context);
    },
    disconnect(context) {
      connection.disconnect();
    },
    sendMessage(context, msg) {
      connection.send(msg);
    },
  },
});

export default store;