Skip to content

Commit

Permalink
Minor performance fixes to perspective data loading
Browse files Browse the repository at this point in the history
  • Loading branch information
Riekr committed Nov 20, 2023
1 parent 403fbc6 commit 7d96230
Show file tree
Hide file tree
Showing 3 changed files with 56 additions and 20 deletions.
32 changes: 19 additions & 13 deletions src/main/html/org/riekr/jloga/http/perspective/jloga.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,21 +4,27 @@ const worker = perspective.worker();
const viewer = document.querySelector("perspective-viewer");
viewer.toggleConfig();

let table, u;

async function s(title, data) {
if (title && title.length)
window.document.title = title;
table && table.clear();
table = await worker.table(data);
u = table.update
await viewer.load(table);
}

let table;
const socket = new WebSocket(window.location.origin.replace("http", "ws"));
socket.onmessage = async (msg) => {
// console.log("socket.onmessage", msg);
await eval(msg.data.substr(8));
// console.log("socket.onmessage", msg);
switch(msg.data.charAt(8)) {
case 't':
window.document.title = msg.data.substring(9);
break;
case 's':
table && table.clear();
table = await worker.table(JSON.parse(msg.data.substring(9)));
await viewer.load(table);
break;
case 'u':
table.update(JSON.parse(msg.data.substring(9)));
break;
default:
alert('invalid command ' + msg.data.charAt(0));
socket.send(msg.data.substr(0, 8) + "KO");
return;
}
socket.send(msg.data.substr(0, 8) + "OK");
}
setInterval(() => {
Expand Down
29 changes: 22 additions & 7 deletions src/main/java/org/riekr/jloga/httpd/FinosPerspectiveServer.java
Original file line number Diff line number Diff line change
Expand Up @@ -42,20 +42,35 @@ final class LoadOperation extends ArrowConversion {
super(data.next());
}

void set() {
sendJS("s('" + (title == null ? "null" : title.replace("'", "\\'")) + "'," + toArrowChunk(data) + ')', this::update);
void check(String res) {
if (!res.equals("OK"))
throw new IllegalArgumentException("JS failed: " + res);
}

void title() {
sendJS("t" + title, (res) -> {
check(res);
start();
});
}

void start() {
sendJS("s" + toArrowChunk(data), this::update);
}

void update(String res) {
if (!res.equals("OK"))
throw new IllegalArgumentException("JS failed: " + res);
check(res);
if (data.hasNext())
sendJS("u(" + toArrowChunk(data) + ')', this::update);
sendJS("u" + toArrowChunk(data), this::update);
}
}
LoadOperation loadOperation = new LoadOperation();
if (data.hasNext())
loadOperation.set();
if (data.hasNext()) {
if (title != null && !title.isEmpty())
loadOperation.title();
else
loadOperation.start();
}
}
}

Expand Down
15 changes: 15 additions & 0 deletions src/test/java/org/riekr/jloga/transform/ArrowConversionTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,9 @@

import java.time.format.DateTimeParseException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;

public class ArrowConversionTest {

Expand Down Expand Up @@ -65,4 +68,16 @@ public void escapeQuotes() {
Assert.assertEquals("\\\"1\\\",2,\\\"3\\\",4,\\\"5\\\",ciao", c.toString());
}

@Test
public void format() {
ArrowConversion ac = new ArrowConversion(new String[]{"C1", "C2"});
List<String[]> data = Arrays.asList(
new String[]{"C1a", "C2a"},
new String[]{"C1b", "C2b"}
);
Iterator<String[]> i = data.iterator();
System.out.println(ac.toArrowChunk(i));
System.out.println(ac.toArrowChunk(i));
}

}

0 comments on commit 7d96230

Please sign in to comment.