Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(809)

Side by Side Diff: fuzzer/go/frontend/data/report.go

Issue 1676593002: Remove old count and overview fuzzer elements (Closed) Base URL: https://skia.googlesource.com/buildbot@filter-ui
Patch Set: merged in above Created 4 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « fuzzer/elements.html ('k') | fuzzer/go/frontend/data/report_test.go » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 package data 1 package data
2 2
3 import ( 3 import (
4 "bytes" 4 "bytes"
5 "encoding/gob" 5 "encoding/gob"
6 "fmt" 6 "fmt"
7 "sort" 7 "sort"
8 "sync" 8 "sync"
9 9
10 "github.com/skia-dev/glog" 10 "github.com/skia-dev/glog"
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
69 caches: map[string]*fuzzReportCache{}, 69 caches: map[string]*fuzzReportCache{},
70 } 70 }
71 } 71 }
72 72
73 // A fuzzReportCache holds three FuzzReportTrees - one for the raw data, a sorte d version with 73 // A fuzzReportCache holds three FuzzReportTrees - one for the raw data, a sorte d version with
74 // all of the reports and an empty tree that holds no reports. These are used t o procure data 74 // all of the reports and an empty tree that holds no reports. These are used t o procure data
75 // for the frontend. 75 // for the frontend.
76 type fuzzReportCache struct { 76 type fuzzReportCache struct {
77 // All the data goes in here, in no particular order 77 // All the data goes in here, in no particular order
78 rawData FuzzReportTree 78 rawData FuzzReportTree
79 » // Generated, sorted caches 79 » // Generated, sorted cache
80 » FullReport FuzzReportTree 80 » FullReport FuzzReportTree
81 » SummaryReport FuzzReportTree
82 81
83 » // If data is in rawData, but not in SummaryReport or FullReport, the tr ees should be 82 » // If data is in rawData, but not in FullReport, the trees should be
84 // rebuilt 83 // rebuilt
85 isDirty bool 84 isDirty bool
86 } 85 }
87 86
88 // currentData is the object that holds the cache of fuzz results. It is used b y the frontend. 87 // currentData is the object that holds the cache of fuzz results. It is used b y the frontend.
89 var currentData = newBuilder() 88 var currentData = newBuilder()
90 89
91 // stagingData is the object that processes can write to to queue up new data 90 // stagingData is the object that processes can write to to queue up new data
92 // without disturbing the data shown to users. 91 // without disturbing the data shown to users.
93 var stagingData = newBuilder() 92 var stagingData = newBuilder()
94 93
95 func FindFuzzSummary(category string) FuzzReportTree {
96 cache, found := currentData.caches[category]
97 if !found {
98 return FuzzReportTree{}
99 }
100 return cache.SummaryReport
101 }
102
103 // FindFuzzDetails returns the detailed fuzz reports for a file name, function n ame, and line number. 94 // FindFuzzDetails returns the detailed fuzz reports for a file name, function n ame, and line number.
104 // If functionName is "" or lineNumber is -1, all reports are shown. 95 // If functionName is "" or lineNumber is -1, all reports are shown.
105 func FindFuzzDetails(category, fileName, functionName string, lineNumber int) (F uzzReportTree, error) { 96 func FindFuzzDetails(category, fileName, functionName string, lineNumber int) (F uzzReportTree, error) {
106 cache, found := currentData.caches[category] 97 cache, found := currentData.caches[category]
107 if found { 98 if found {
108 if fileName == "" { 99 if fileName == "" {
109 return cache.FullReport, nil 100 return cache.FullReport, nil
110 } 101 }
111 for _, file := range cache.FullReport { 102 for _, file := range cache.FullReport {
112 if file.FileName == fileName { 103 if file.FileName == fileName {
(...skipping 25 matching lines...) Expand all
138 129
139 // filterByLineNumber removes all FuzzReportLineNumber except that which matches lineNumber 130 // filterByLineNumber removes all FuzzReportLineNumber except that which matches lineNumber
140 func (function *FunctionFuzzReport) filterByLineNumber(lineNumber int) { 131 func (function *FunctionFuzzReport) filterByLineNumber(lineNumber int) {
141 for _, line := range function.LineNumbers { 132 for _, line := range function.LineNumbers {
142 if lineNumber == line.LineNumber { 133 if lineNumber == line.LineNumber {
143 function.LineNumbers = []LineFuzzReport{line} 134 function.LineNumbers = []LineFuzzReport{line}
144 } 135 }
145 } 136 }
146 } 137 }
147 138
148 func CategoryOverview(category string) FuzzReportTree {
149 overview, found := currentData.caches[category]
150 if found {
151 return overview.SummaryReport
152 }
153 return FuzzReportTree{}
154 }
155
156 // FindFuzzDetailForFuzz returns a tree containing the single 139 // FindFuzzDetailForFuzz returns a tree containing the single
157 // report with the given name, or an error, it it doesn't exist. 140 // report with the given name, or an error, it it doesn't exist.
158 func FindFuzzDetailForFuzz(category, name string) (FuzzReportTree, error) { 141 func FindFuzzDetailForFuzz(category, name string) (FuzzReportTree, error) {
159 if cache, found := currentData.caches[category]; found { 142 if cache, found := currentData.caches[category]; found {
160 for _, file := range cache.FullReport { 143 for _, file := range cache.FullReport {
161 if file.filterByFuzzName(name) { 144 if file.filterByFuzzName(name) {
162 return FuzzReportTree{file}, nil 145 return FuzzReportTree{file}, nil
163 } 146 }
164 } 147 }
165 } 148 }
(...skipping 192 matching lines...) Expand 10 before | Expand all | Expand 10 after
358 return FuzzReportTree{} 341 return FuzzReportTree{}
359 } 342 }
360 if cache.isDirty { 343 if cache.isDirty {
361 r.mutex.Lock() 344 r.mutex.Lock()
362 defer r.mutex.Unlock() 345 defer r.mutex.Unlock()
363 cache.rebuildSortedReports() 346 cache.rebuildSortedReports()
364 } 347 }
365 return cache.FullReport 348 return cache.FullReport
366 } 349 }
367 350
368 // getSummarySortedByTotal gets the summary FuzzReport for a fuzz category
369 // sorted by total number of fuzzes.
370 func (r *treeReportBuilder) getSummarySortedByTotal(category string) FuzzReportT ree {
371 cache, found := r.caches[category]
372 if !found {
373 glog.Warningf("Could not find report tree for category %s", cate gory)
374 return FuzzReportTree{}
375 }
376 if cache.isDirty {
377 r.mutex.Lock()
378 defer r.mutex.Unlock()
379 cache.rebuildSortedReports()
380 }
381 return cache.SummaryReport
382 }
383
384 // rebuildSortedReports creates the sorted reports for a given cache. 351 // rebuildSortedReports creates the sorted reports for a given cache.
385 func (c *fuzzReportCache) rebuildSortedReports() { 352 func (c *fuzzReportCache) rebuildSortedReports() {
386 c.FullReport = c.getClonedSortedReport(true) 353 c.FullReport = c.getClonedSortedReport(true)
387 c.SummaryReport = c.getClonedSortedReport(false)
388 c.isDirty = false 354 c.isDirty = false
389 } 355 }
390 356
391 // getClonedSortedReport makes a newly allocated FuzzReport after running the pa ssed in function 357 // getClonedSortedReport makes a newly allocated FuzzReport after running the pa ssed in function
392 // on all FuzzReportLineNumber objects in the report. 358 // on all FuzzReportLineNumber objects in the report.
393 func (c *fuzzReportCache) getClonedSortedReport(keepDetails bool) FuzzReportTree { 359 func (c *fuzzReportCache) getClonedSortedReport(keepDetails bool) FuzzReportTree {
394 report := cloneReport(c.rawData) 360 report := cloneReport(c.rawData)
395 sort.Sort(filesTotalSort(report)) 361 sort.Sort(filesTotalSort(report))
396 for i := range report { 362 for i := range report {
397 file := &report[i] 363 file := &report[i]
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after
490 } 456 }
491 457
492 // containsName returns the FuzzReport and true if a fuzz with the given name is in the list. 458 // containsName returns the FuzzReport and true if a fuzz with the given name is in the list.
493 func (p SortedFuzzReports) containsName(fuzzName string) (FuzzReport, bool) { 459 func (p SortedFuzzReports) containsName(fuzzName string) (FuzzReport, bool) {
494 i := sort.Search(len(p), func(i int) bool { return p[i].FuzzName >= fuzz Name }) 460 i := sort.Search(len(p), func(i int) bool { return p[i].FuzzName >= fuzz Name })
495 if i < len(p) && p[i].FuzzName == fuzzName { 461 if i < len(p) && p[i].FuzzName == fuzzName {
496 return p[i], true 462 return p[i], true
497 } 463 }
498 return FuzzReport{}, false 464 return FuzzReport{}, false
499 } 465 }
OLDNEW
« no previous file with comments | « fuzzer/elements.html ('k') | fuzzer/go/frontend/data/report_test.go » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698