diff --git a/application.tsx b/application.tsx index 0055bba..6352ca1 100644 --- a/application.tsx +++ b/application.tsx @@ -22,6 +22,7 @@ interface ApplicationState { flamechart: Flamechart | null sortedFlamechart: Flamechart | null sortOrder: SortOrder + loading: boolean } interface ToolbarProps extends ApplicationState { @@ -121,6 +122,7 @@ export class Application extends ReloadableComponent<{}, ApplicationState> { constructor() { super() this.state = { + loading: false, profile: null, flamechart: null, sortedFlamechart: null, @@ -132,6 +134,7 @@ export class Application extends ReloadableComponent<{}, ApplicationState> { console.time('import') const profile = importProfile(contents, fileName) if (profile == null) { + this.setState({ loading: false }) // TODO(jlfwong): Make this a nicer overlay alert('Unrecognized format! See documentation about supported formats.') return @@ -160,20 +163,25 @@ export class Application extends ReloadableComponent<{}, ApplicationState> { console.timeEnd('import') console.time('first setState') - this.setState({ profile, flamechart, sortedFlamechart }, () => { + this.setState({ profile, flamechart, sortedFlamechart, loading: false }, () => { console.timeEnd('first setState') }) } loadFromFile(file: File) { - const reader = new FileReader - reader.addEventListener('loadend', () => { - this.loadFromString(file.name, reader.result) + this.setState({ loading: true }, () => { + requestAnimationFrame(() => { + const reader = new FileReader + reader.addEventListener('loadend', () => { + this.loadFromString(file.name, reader.result) + }) + reader.readAsText(file) + }) }) - reader.readAsText(file) } loadExample = () => { + this.setState({ loading: true }) fetch('dist/perf-vertx-stacks-01-collapsed-all.txt').then(resp => resp.text()).then(data => { this.loadFromString('perf-vertx-stacks-01-collapsed-all.txt', data) }) @@ -247,24 +255,46 @@ export class Application extends ReloadableComponent<{}, ApplicationState> { } + renderLoadingBar() { + return
+ } + setSortOrder = (sortOrder: SortOrder) => { this.setState({ sortOrder }) } render() { - const {flamechart, sortedFlamechart, sortOrder} = this.state + const {flamechart, sortedFlamechart, sortOrder, loading} = this.state const flamechartToView = sortOrder == SortOrder.CHRONO ? flamechart : sortedFlamechart return