blob: 818b2d2f1ef22bf284ea3218e15c68490f7d1a42 [file] [log] [blame] [view]
# System Monitor Dockyard
The Dockyard is used as a library (with no GUI itself) that collects data from
the Fuchsia device through the transport system. It responds to requests from
the GUI for digestible (i.e. small) sections of data that will be presented to
the user.
In the future, the Dockyard may execute as an independent process on the Host
machine.
## For the GUI
To get started with the Dockyard API, here's a brief overview for getting
sample data for rendering in the GUI.
If something is unclear or if you prefer examples, consider looking in
./dockyard_test.cc to get an idea of how the pieces work together.
- Create a Dockyard instance.
- Add handlers for new dockyard paths and stream sets:
- dockyard.SetDockyardPathsHandler(MyDockyardPathHandler);
- dockyard.SetStreamSetsHandler(MyStreamSetHandler);
- For testing, create some pseudo-random samples
- Create a RandomSampleGenerator
- Pass it and the dockyard to GenerateRandomSamples()
- Try requesting some Samples
- Create a StreamSetsRequest
- Pass it to dockyard.GetStreamSets()
- Kick back and wait for MyStreamSetHandler to be called
- (for testing ProcessRequests() can be used to force it).
- When MyStreamSetHandler is called, loop over the data_sets to get the
sample values.
### RandomSampleGenerator
The RandomSampleGenerator has several options that allow for creating a wide
variety of samples. It may take some tinkering with different time style and
value generation styles to get the hang of it. Experimentation is encouraged.
### StreamSetsRequest
The StreamSetsRequest includes settings for the rendering style. This affects
how data is summarized. If every column in the GUI graph exactly matched a
Sample, then no render style would be needed. That's expected to be very
uncommon. So often, some kind of filtering will be necessary to approximate the
actual data.
One reasonable approach is to take the average of the values for each column of
the graph. Though this can be odd because some peaks and valleys may not reach
their extremes. E.g. if the values 90 and 100 are averaged, the result is 95. If
that is the peak of a graph, the rendered value can fall slightly short of what
we might expect.
Using the rendering style SCULPTING pulls the highs to their peaks and the lows
to their valleys. Of course, this is also an approximation and not a 100% true
representation of the data.
Or maybe there's a desire to smooth a rather fuzzy looking rendering. If the
data is rapidly jumping between values it can be hard to visualize the trend.
Using the rendering style WIDE_SMOOTHING will blend neighboring values to
produce a graph that is less jagged.
There are other rendering styles, again experimentation is encouraged.