diff --git a/frontend/src/components/BugList.vue b/frontend/src/components/BugList.vue index 57952ed..fc2a4f1 100644 --- a/frontend/src/components/BugList.vue +++ b/frontend/src/components/BugList.vue @@ -61,9 +61,7 @@ const formatDate = (timestamp) => { const tagNameType = [ { name: "Fixed", type: "success"}, - { name: "Minor", type: ""}, - { name: "Normal", type: "warning"}, - { name: "Critical", type: "danger"} + { name: "Open", type: "danger"} ] const handleChangeTag = (row, tagName, tagType) => { diff --git a/frontend/src/components/BugView.vue b/frontend/src/components/BugView.vue index e8ae807..e0e9c49 100644 --- a/frontend/src/components/BugView.vue +++ b/frontend/src/components/BugView.vue @@ -112,7 +112,7 @@ onMounted(async () => {
  • Label: ${e.item.getModel().label || e.item.getModel().id}
  • `; return outDiv; }, diff --git a/frontend/src/components/Dashboard.vue b/frontend/src/components/Dashboard.vue index 908b934..45bc61c 100644 --- a/frontend/src/components/Dashboard.vue +++ b/frontend/src/components/Dashboard.vue @@ -55,12 +55,12 @@ const checkerIsolationLevelOptions = [ {label: 'Transactional Causal Consistency', value: 'TRANSACTIONAL_CAUSAL_CONSISTENCY'}, {label: 'Snapshot Isolation', value: 'SNAPSHOT_ISOLATION'}, {label: 'Serializable', value: 'SERIALIZABLE'}, - {label: 'Viper SI', value: 'VIPER_SNAPSHOT_ISOLATION'}, - {label: 'PolySI+', value: 'CUSTOM_SNAPSHOT_ISOLATION'} + {label: 'Snapshot Isolation(Viper)', value: 'VIPER_SNAPSHOT_ISOLATION'}, + {label: 'Snapshot Isolation(PolySI+)', value: 'CUSTOM_SNAPSHOT_ISOLATION'} ]; const historyTypeOptions = [ - {label: 'Text', value: 'text'}, - {label: 'Elle', value: 'elle'}, + {label: 'Read-Write Register(text)', value: 'text'}, + {label: 'List-Append(elle)', value: 'elle'}, ]; const handleSelectionChange = (value: string) => { console.log('Selected:', value); @@ -142,12 +142,13 @@ const handleIndexChange = (index) => { height="500px" arrow="always" @change="handleIndexChange"> +
    -

    Database Settings

    +

    Database Setting

    { - + { - + {
    +
    -

    Workload Settings

    +

    Workload Setting

    + inactive-text="Skip Generator"/> { - + { - + { - + @@ -344,12 +346,13 @@ const handleIndexChange = (index) => {
    +
    -

    Checker Settings

    +

    Checker Setting

    {
    + diff --git a/frontend/src/components/RunView.vue b/frontend/src/components/RunView.vue index 4b3b291..d0781aa 100644 --- a/frontend/src/components/RunView.vue +++ b/frontend/src/components/RunView.vue @@ -41,7 +41,7 @@ const createProfileCharts = () => { }, legend: { textStyle: { - fontSize: 18 + fontSize: 20 }, data: profileData.legend }, @@ -51,11 +51,11 @@ const createProfileCharts = () => { boundaryGap: false, data: profileData.x_axis, axisLabel: { - fontSize: 18, + fontSize: 20, color: '#000', }, nameTextStyle: { - "fontSize": 18, + "fontSize": 20, color: '#000' } }, @@ -63,11 +63,11 @@ const createProfileCharts = () => { name: 'Time(s)', type: 'value', axisLabel: { - fontSize: 18, + fontSize: 20, color: '#000' }, nameTextStyle: { - "fontSize": 20, + "fontSize": 22, color: '#000' } }, @@ -91,7 +91,7 @@ const createProfileCharts = () => { }, legend: { textStyle: { - fontSize: 18 + fontSize: 20 }, data: profileData.legend }, @@ -101,11 +101,11 @@ const createProfileCharts = () => { boundaryGap: false, data: profileData.x_axis, axisLabel: { - fontSize: 18, + fontSize: 20, color: '#000', }, nameTextStyle: { - "fontSize": 18, + "fontSize": 20, color: '#000' } }, @@ -113,11 +113,11 @@ const createProfileCharts = () => { name: 'Memory(MB)', type: 'value', axisLabel: { - fontSize: 18, + fontSize: 20, color: '#000' }, nameTextStyle: { - "fontSize": 20, + "fontSize": 22, color: '#000' } }, @@ -136,14 +136,15 @@ const createProfileCharts = () => { } }, tooltip: { - // trigger: 'axis', - // axisPointer: { - // type: 'shadow' - // } + trigger: "item", + formatter: function (params) { + console.log(params) + return profileData.idxToChecker[params.dataIndex][params.componentIndex] + "
    " + params.marker + params.seriesName + ":  " + params.data + "" + } }, legend: { textStyle: { - fontSize: 18 + fontSize: 20 }, }, // grid: { @@ -158,11 +159,11 @@ const createProfileCharts = () => { // boundaryGap: false, data: profileData.x_axis, axisLabel: { - fontSize: 18, + fontSize: 20, color: '#000', }, nameTextStyle: { - "fontSize": 18, + "fontSize": 20, color: '#000' } }, @@ -170,15 +171,15 @@ const createProfileCharts = () => { name: 'Time(s)', type: 'value', axisLabel: { - fontSize: 18, + fontSize: 20, color: '#000' }, nameTextStyle: { - "fontSize": 20, + "fontSize": 22, color: '#000' } }, - series: profileData.stageSeries + series: profileData.stageSeries, }; profileStagesOption && profileStagesChart.setOption(profileStagesOption); @@ -203,8 +204,9 @@ const createRuntimeInfoCharts = () => { type: 'time', axisLabel: { formatter: '{HH}:{mm}:{ss}', - fontSize: 16, + fontSize: 20, color: '#000', + rotate: 30 }, }, yAxis: { @@ -212,11 +214,11 @@ const createRuntimeInfoCharts = () => { type: 'value', max: 100, axisLabel: { - fontSize: 18, + fontSize: 20, color: '#000' }, nameTextStyle: { - "fontSize": 20, + "fontSize": 22, color: '#000' } }, @@ -251,19 +253,20 @@ const createRuntimeInfoCharts = () => { type: 'time', axisLabel: { formatter: '{HH}:{mm}:{ss}', - fontSize: 16, + fontSize: 20, color: '#000', + rotate: 30 }, }, yAxis: { name: 'Memory(MB)', type: 'value', axisLabel: { - fontSize: 18, + fontSize: 20, color: '#000' }, nameTextStyle: { - "fontSize": 20, + "fontSize": 22, color: '#000' } }, @@ -328,7 +331,15 @@ const handleGetProfileRes = (res)=> { profileData.memorySeries = [] profileData.stageSeries = [] profileData.legend = [] - for (let series of profileData.series) { + profileData.idxToChecker = {} + let maxIndex = {} + for (let i = 0; i < res.data.x_axis.length; i++) { + profileData.idxToChecker[i] = {} + maxIndex[i] = 0 + } + for (let [seriesIdx, series] of profileData.series.entries()) { + console.log("series") + console.log(seriesIdx, series) profileData.timeSeries.push({ name: series.checker, data: series.time, @@ -339,17 +350,22 @@ const handleGetProfileRes = (res)=> { data: series.memory, type: 'line' }) - Object.entries(series.stage_times).forEach(([stage, state_times]) => { + console.log(maxIndex) + Object.entries(series.stage_times).forEach(([stage, state_times], stageIdx) => { profileData.stageSeries.push({ name: stage, type: 'bar', stack: series.checker, - emphasis: { - focus: 'series' - }, - data: state_times + emphasis: {}, + data: state_times, }) + for (let [timeIdx, time] of state_times.entries()) { + profileData.idxToChecker[timeIdx][maxIndex[timeIdx]] = series.checker + maxIndex[timeIdx] += 1 + } }) + console.log(profileData.idxToChecker) + profileData.legend.push(series.checker) } console.log(profileData) @@ -497,7 +513,7 @@ watch(shouldRefresh, async (newVal) => { } .chart { - width: 800px; + width: 850px; height: 500px; } diff --git a/src/main/java/Main.java b/src/main/java/Main.java index 105af18..49461df 100644 --- a/src/main/java/Main.java +++ b/src/main/java/Main.java @@ -192,7 +192,7 @@ public void run(Properties config) { var profileMap = profileInfo.getOrDefault(checkerIsolation, new HashMap()); var stageTimeList = new ArrayList(); stages.forEach(stage -> stageTimeList.add(profileMap.getOrDefault(stage, 0L))); - Profiler.appendToCSV(val, avgTime, maxMemory, triple.getRight(), stageTimeList); + Profiler.appendToCSV(val, Math.min(avgTime, stageTimeList.stream().reduce(0L, Long::sum)), maxMemory, triple.getRight(), stageTimeList); profiler.removeTag(checkerIsolation); } };