Search in sources :

Example 1 with RangedSeries

use of com.android.tools.adtui.model.RangedSeries in project android by JetBrains.

the class StateChartVisualTest method populateUi.

@Override
protected void populateUi(@NotNull JPanel panel) {
    panel.setLayout(new BorderLayout());
    JLayeredPane timelinePane = createMockTimeline();
    panel.add(timelinePane, BorderLayout.CENTER);
    final JPanel controls = new JPanel();
    LayoutManager manager = new BoxLayout(controls, BoxLayout.Y_AXIS);
    controls.setLayout(manager);
    panel.add(controls, BorderLayout.WEST);
    final AtomicInteger networkVariance = new AtomicInteger(MockFruitState.values().length);
    final AtomicInteger radioVariance = new AtomicInteger(MockStrengthState.values().length);
    final AtomicInteger delay = new AtomicInteger(100);
    //TODO Refactor this to come from the DataStore, in the mean time we will leak a thread every time reset is called on this test.
    Thread updateDataThread = new Thread() {

        @Override
        public void run() {
            super.run();
            try {
                // Store off the last state to simulate the same preprocessing the DataStore does on each series.
                TIntArrayList lastNetworkData = new TIntArrayList();
                TIntArrayList lastRadioVariance = new TIntArrayList();
                while (true) {
                    long nowUs = TimeUnit.NANOSECONDS.toMicros(System.nanoTime());
                    int v = networkVariance.get();
                    for (int i = 0; i < mNetworkDataEntries.size(); i++) {
                        DefaultDataSeries<MockFruitState> series = mNetworkDataEntries.get(i);
                        if (Math.random() > 0.5f) {
                            int index = (int) (Math.random() * v);
                            if (lastNetworkData.size() <= i) {
                                lastNetworkData.add(-1);
                            }
                            if (lastNetworkData.get(i) != index) {
                                series.add(nowUs, MockFruitState.values()[index]);
                                lastNetworkData.set(i, index);
                            }
                        }
                    }
                    v = radioVariance.get();
                    for (int i = 0; i < mRadioDataEntries.size(); i++) {
                        DefaultDataSeries<MockStrengthState> series = mRadioDataEntries.get(i);
                        if (Math.random() > 0.5f) {
                            int index = (int) (Math.random() * v);
                            if (lastRadioVariance.size() <= i) {
                                lastRadioVariance.add(-1);
                            }
                            if (lastRadioVariance.get(i) != index) {
                                series.add(nowUs, MockStrengthState.values()[index]);
                                lastRadioVariance.set(i, index);
                            }
                        }
                    }
                    Thread.sleep(delay.get());
                }
            } catch (InterruptedException e) {
            }
        }
    };
    updateDataThread.start();
    controls.add(VisualTest.createVariableSlider("ArcWidth", 0, 100, new VisualTests.Value() {

        @Override
        public void set(int v) {
            mNetworkStatusChart.setArcWidth(v / 100f);
            mRadioStateChart.setArcWidth(v / 100f);
        }

        @Override
        public int get() {
            // unused
            return -1;
        }
    }));
    controls.add(VisualTest.createVariableSlider("ArcHeight", 0, 100, new VisualTests.Value() {

        @Override
        public void set(int v) {
            mNetworkStatusChart.setArcHeight(v / 100f);
            mRadioStateChart.setArcHeight(v / 100f);
        }

        @Override
        public int get() {
            // unused
            return -1;
        }
    }));
    controls.add(VisualTest.createVariableSlider("Gap", 0, 100, new VisualTests.Value() {

        @Override
        public void set(int v) {
            mNetworkStatusChart.setHeightGap(v / 100f);
            mRadioStateChart.setHeightGap(v / 100f);
        }

        @Override
        public int get() {
            // unused
            return -1;
        }
    }));
    controls.add(VisualTest.createVariableSlider("Delay", 10, 5000, new VisualTests.Value() {

        @Override
        public void set(int v) {
            delay.set(v);
        }

        @Override
        public int get() {
            return delay.get();
        }
    }));
    controls.add(VisualTest.createVariableSlider("Fruit Variance", 1, MockFruitState.values().length, new VisualTests.Value() {

        @Override
        public void set(int v) {
            networkVariance.set(v);
        }

        @Override
        public int get() {
            return networkVariance.get();
        }
    }));
    controls.add(VisualTest.createVariableSlider("Strength Variance", 1, MockStrengthState.values().length, new VisualTests.Value() {

        @Override
        public void set(int v) {
            radioVariance.set(v);
        }

        @Override
        public int get() {
            return radioVariance.get();
        }
    }));
    controls.add(VisualTest.createButton("Add Fruit Series", e -> {
        DefaultDataSeries<MockFruitState> networkSeries = new DefaultDataSeries<>();
        RangedSeries<MockFruitState> networkData = new RangedSeries(mTimeGlobalRangeUs, networkSeries);
        mNetworkStatusChart.addSeries(networkData);
        mNetworkDataEntries.add(networkSeries);
    }));
    controls.add(VisualTest.createButton("Add Strength Series", e -> {
        DefaultDataSeries<MockStrengthState> radioSeries = new DefaultDataSeries<>();
        RangedSeries<MockStrengthState> radioData = new RangedSeries(mTimeGlobalRangeUs, radioSeries);
        mRadioStateChart.addSeries(radioData);
        mRadioDataEntries.add(radioSeries);
    }));
    controls.add(VisualTest.createCheckbox("Shift xRange Min", itemEvent -> mAnimatedTimeRange.setShift(itemEvent.getStateChange() == ItemEvent.SELECTED)));
    controls.add(VisualTest.createCheckbox("Text Mode", itemEvent -> {
        StateChart.RenderMode mode = itemEvent.getStateChange() == ItemEvent.SELECTED ? StateChart.RenderMode.TEXT : StateChart.RenderMode.BAR;
        mNetworkStatusChart.setRenderMode(mode);
        mRadioStateChart.setRenderMode(mode);
    }));
    controls.add(new Box.Filler(new Dimension(0, 0), new Dimension(300, Integer.MAX_VALUE), new Dimension(300, Integer.MAX_VALUE)));
}
Also used : ItemEvent(java.awt.event.ItemEvent) Range(com.android.tools.adtui.model.Range) Arrays(java.util.Arrays) AxisComponent(com.android.tools.adtui.AxisComponent) DefaultDataSeries(com.android.tools.adtui.model.DefaultDataSeries) StateChart(com.android.tools.adtui.chart.StateChart) EnumMap(java.util.EnumMap) RangedSeries(com.android.tools.adtui.model.RangedSeries) Animatable(com.android.tools.adtui.Animatable) AnimatedTimeRange(com.android.tools.adtui.AnimatedTimeRange) ComponentEvent(java.awt.event.ComponentEvent) ArrayList(java.util.ArrayList) java.awt(java.awt) ComponentAdapter(java.awt.event.ComponentAdapter) TimeUnit(java.util.concurrent.TimeUnit) List(java.util.List) AnimatedComponent(com.android.tools.adtui.AnimatedComponent) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) NotNull(org.jetbrains.annotations.NotNull) TIntArrayList(gnu.trove.TIntArrayList) JBColor(com.intellij.ui.JBColor) javax.swing(javax.swing) RangedSeries(com.android.tools.adtui.model.RangedSeries) TIntArrayList(gnu.trove.TIntArrayList) DefaultDataSeries(com.android.tools.adtui.model.DefaultDataSeries) AtomicInteger(java.util.concurrent.atomic.AtomicInteger)

Example 2 with RangedSeries

use of com.android.tools.adtui.model.RangedSeries in project android by JetBrains.

the class StateChartReducerVisualTest method createComponentsList.

@Override
protected List<Animatable> createComponentsList() {
    myViewRange = new Range();
    myData = new DefaultDataSeries<>();
    RangedSeries<ColorState> series = new RangedSeries<>(myViewRange, myData);
    myColorChart = new StateChart<>(COLOR_STATE_COLORS, (rectangles, values) -> {
    });
    myColorChart.addSeries(series);
    myOptimizedColorChart = new StateChart<>(COLOR_STATE_COLORS);
    myOptimizedColorChart.addSeries(series);
    return Arrays.asList(myColorChart, myOptimizedColorChart);
}
Also used : ItemEvent(java.awt.event.ItemEvent) Range(com.android.tools.adtui.model.Range) Arrays(java.util.Arrays) DefaultDataSeries(com.android.tools.adtui.model.DefaultDataSeries) StateChart(com.android.tools.adtui.chart.StateChart) EnumMap(java.util.EnumMap) RangedSeries(com.android.tools.adtui.model.RangedSeries) Random(java.util.Random) AdtUiUtils(com.android.tools.adtui.common.AdtUiUtils) java.awt(java.awt) com.android.tools.adtui(com.android.tools.adtui) List(java.util.List) NotNull(org.jetbrains.annotations.NotNull) JBColor(com.intellij.ui.JBColor) javax.swing(javax.swing) Range(com.android.tools.adtui.model.Range) RangedSeries(com.android.tools.adtui.model.RangedSeries)

Example 3 with RangedSeries

use of com.android.tools.adtui.model.RangedSeries in project android by JetBrains.

the class StateChartVisualTest method createComponentsList.

@Override
protected List<Animatable> createComponentsList() {
    long nowUs = TimeUnit.NANOSECONDS.toMicros(System.nanoTime());
    mTimeGlobalRangeUs = new Range(nowUs, nowUs + TimeUnit.SECONDS.toMicros(60));
    mAnimatedTimeRange = new AnimatedTimeRange(mTimeGlobalRangeUs, 0);
    DefaultDataSeries<MockFruitState> networkSeries = new DefaultDataSeries<>();
    DefaultDataSeries<MockStrengthState> radioSeries = new DefaultDataSeries<>();
    RangedSeries<MockFruitState> networkData = new RangedSeries<>(mTimeGlobalRangeUs, networkSeries);
    RangedSeries<MockStrengthState> radioData = new RangedSeries<>(mTimeGlobalRangeUs, radioSeries);
    mNetworkStatusChart = new StateChart<>(getFruitStateColor());
    mNetworkStatusChart.addSeries(networkData);
    mNetworkDataEntries.add(networkSeries);
    mRadioStateChart = new StateChart<>(getStrengthColor());
    mRadioStateChart.addSeries(radioData);
    mRadioDataEntries.add(radioSeries);
    return Arrays.asList(mAnimatedTimeRange, mNetworkStatusChart, mRadioStateChart);
}
Also used : AnimatedTimeRange(com.android.tools.adtui.AnimatedTimeRange) DefaultDataSeries(com.android.tools.adtui.model.DefaultDataSeries) Range(com.android.tools.adtui.model.Range) AnimatedTimeRange(com.android.tools.adtui.AnimatedTimeRange) RangedSeries(com.android.tools.adtui.model.RangedSeries)

Example 4 with RangedSeries

use of com.android.tools.adtui.model.RangedSeries in project android by JetBrains.

the class MemoryProfilerStageView method buildMonitorUi.

@NotNull
private JPanel buildMonitorUi() {
    StudioProfilers profilers = getStage().getStudioProfilers();
    ProfilerTimeline timeline = profilers.getTimeline();
    Range viewRange = getTimeline().getViewRange();
    Range dataRange = getTimeline().getDataRange();
    TabularLayout layout = new TabularLayout("*");
    JPanel panel = new JBPanel(layout);
    panel.setBackground(ProfilerColors.MONITOR_BACKGROUND);
    // The scrollbar can modify the view range - so it should be registered to the Choreographer before all other Animatables
    // that attempts to read the same range instance.
    ProfilerScrollbar sb = new ProfilerScrollbar(getChoreographer(), timeline, panel);
    getChoreographer().register(sb);
    panel.add(sb, new TabularLayout.Constraint(3, 0));
    AxisComponent timeAxis = buildTimeAxis(profilers);
    getChoreographer().register(timeAxis);
    panel.add(timeAxis, new TabularLayout.Constraint(2, 0));
    EventMonitor events = new EventMonitor(profilers);
    EventMonitorView eventsView = new EventMonitorView(events);
    JComponent eventsComponent = eventsView.initialize(getChoreographer());
    panel.add(eventsComponent, new TabularLayout.Constraint(0, 0));
    MemoryMonitor monitor = new MemoryMonitor(profilers);
    JPanel monitorPanel = new JBPanel(new TabularLayout("*", "*"));
    monitorPanel.setOpaque(false);
    monitorPanel.setBorder(MONITOR_BORDER);
    final JLabel label = new JLabel(monitor.getName());
    label.setBorder(MONITOR_LABEL_PADDING);
    label.setVerticalAlignment(SwingConstants.TOP);
    Range leftYRange = new Range(0, 0);
    Range rightYRange = new Range(0, 0);
    RangedContinuousSeries javaSeries = new RangedContinuousSeries("Java", viewRange, leftYRange, monitor.getJavaMemory());
    RangedContinuousSeries nativeSeries = new RangedContinuousSeries("Native", viewRange, leftYRange, monitor.getNativeMemory());
    RangedContinuousSeries graphcisSeries = new RangedContinuousSeries("Graphics", viewRange, leftYRange, monitor.getGraphicsMemory());
    RangedContinuousSeries stackSeries = new RangedContinuousSeries("Stack", viewRange, leftYRange, monitor.getStackMemory());
    RangedContinuousSeries codeSeries = new RangedContinuousSeries("Code", viewRange, leftYRange, monitor.getCodeMemory());
    RangedContinuousSeries otherSeries = new RangedContinuousSeries("Others", viewRange, leftYRange, monitor.getOthersMemory());
    RangedContinuousSeries totalSeries = new RangedContinuousSeries("Total", viewRange, leftYRange, monitor.getTotalMemory());
    RangedContinuousSeries objectSeries = new RangedContinuousSeries("Allocated", viewRange, rightYRange, monitor.getObjectCount());
    final JPanel lineChartPanel = new JBPanel(new BorderLayout());
    lineChartPanel.setOpaque(false);
    lineChartPanel.setBorder(BorderFactory.createEmptyBorder(Y_AXIS_TOP_MARGIN, 0, 0, 0));
    final LineChart lineChart = new LineChart();
    lineChart.addLine(javaSeries, new LineConfig(ProfilerColors.MEMORY_JAVA).setFilled(true).setStacked(true));
    lineChart.addLine(nativeSeries, new LineConfig(ProfilerColors.MEMORY_NATIVE).setFilled(true).setStacked(true));
    lineChart.addLine(graphcisSeries, new LineConfig(ProfilerColors.MEMORY_GRAPHCIS).setFilled(true).setStacked(true));
    lineChart.addLine(stackSeries, new LineConfig(ProfilerColors.MEMORY_STACK).setFilled(true).setStacked(true));
    lineChart.addLine(codeSeries, new LineConfig(ProfilerColors.MEMORY_CODE).setFilled(true).setStacked(true));
    lineChart.addLine(otherSeries, new LineConfig(ProfilerColors.MEMORY_OTHERS).setFilled(true).setStacked(true));
    lineChart.addLine(totalSeries, new LineConfig(ProfilerColors.MEMORY_TOTAL).setFilled(true));
    lineChart.addLine(objectSeries, new LineConfig(ProfilerColors.MEMORY_OBJECTS).setStroke(LineConfig.DEFAULT_DASH_STROKE));
    // TODO set proper colors / icons
    DurationDataRenderer<HeapDumpDurationData> heapDumpRenderer = new DurationDataRenderer.Builder<>(new RangedSeries<>(viewRange, getStage().getHeapDumpSampleDurations()), Color.BLACK).setLabelColors(Color.DARK_GRAY, Color.GRAY, Color.lightGray, Color.WHITE).setStroke(new BasicStroke(2)).setIsBlocking(true).setLabelProvider(data -> String.format("Dump (%s)", data.getDuration() == DurationData.UNSPECIFIED_DURATION ? "in progress" : TimeAxisFormatter.DEFAULT.getFormattedString(viewRange.getLength(), data.getDuration(), true))).setClickHander(data -> getStage().setFocusedHeapDump(data.getDumpInfo())).build();
    DurationDataRenderer<AllocationsDurationData> allocationRenderer = new DurationDataRenderer.Builder<>(new RangedSeries<>(viewRange, getStage().getAllocationInfosDurations()), Color.LIGHT_GRAY).setLabelColors(Color.DARK_GRAY, Color.GRAY, Color.lightGray, Color.WHITE).setStroke(new BasicStroke(2)).setLabelProvider(data -> String.format("Allocation Record (%s)", data.getDuration() == DurationData.UNSPECIFIED_DURATION ? "in progress" : TimeAxisFormatter.DEFAULT.getFormattedString(viewRange.getLength(), data.getDuration(), true))).setClickHander(data -> getStage().setAllocationsTimeRange(data.getStartTimeNs(), data.getEndTimeNs())).build();
    DurationDataRenderer<GcDurationData> gcRenderer = new DurationDataRenderer.Builder<>(new RangedSeries<>(viewRange, monitor.getGcCount()), Color.BLACK).setIcon(myGcIcon).setAttachLineSeries(objectSeries).build();
    lineChart.addCustomRenderer(heapDumpRenderer);
    lineChart.addCustomRenderer(allocationRenderer);
    lineChart.addCustomRenderer(gcRenderer);
    SelectionComponent selection = new SelectionComponent(timeline.getSelectionRange(), timeline.getViewRange());
    final JPanel overlayPanel = new JBPanel(new BorderLayout());
    overlayPanel.setOpaque(false);
    overlayPanel.setBorder(BorderFactory.createEmptyBorder(Y_AXIS_TOP_MARGIN, 0, 0, 0));
    final OverlayComponent overlay = new OverlayComponent(selection);
    overlay.addDurationDataRenderer(heapDumpRenderer);
    overlay.addDurationDataRenderer(allocationRenderer);
    overlay.addDurationDataRenderer(gcRenderer);
    overlayPanel.add(overlay, BorderLayout.CENTER);
    getChoreographer().register(lineChart);
    getChoreographer().register(heapDumpRenderer);
    getChoreographer().register(allocationRenderer);
    getChoreographer().register(gcRenderer);
    getChoreographer().register(overlay);
    getChoreographer().register(selection);
    lineChartPanel.add(lineChart, BorderLayout.CENTER);
    final JPanel axisPanel = new JBPanel(new BorderLayout());
    axisPanel.setOpaque(false);
    AxisComponent.Builder leftBuilder = new AxisComponent.Builder(leftYRange, MEMORY_AXIS_FORMATTER, AxisComponent.AxisOrientation.RIGHT).showAxisLine(false).showMax(true).showUnitAtMax(true).clampToMajorTicks(true).setMarkerLengths(MARKER_LENGTH, MARKER_LENGTH).setMargins(0, Y_AXIS_TOP_MARGIN);
    final AxisComponent leftAxis = leftBuilder.build();
    getChoreographer().register(leftAxis);
    axisPanel.add(leftAxis, BorderLayout.WEST);
    AxisComponent.Builder rightBuilder = new AxisComponent.Builder(rightYRange, OBJECT_COUNT_AXIS_FORMATTER, AxisComponent.AxisOrientation.LEFT).showAxisLine(false).showMax(true).showUnitAtMax(true).clampToMajorTicks(true).setMarkerLengths(MARKER_LENGTH, MARKER_LENGTH).setMargins(0, Y_AXIS_TOP_MARGIN);
    final AxisComponent rightAxis = rightBuilder.build();
    getChoreographer().register(rightAxis);
    axisPanel.add(rightAxis, BorderLayout.EAST);
    final LegendComponent legend = new LegendComponent(LegendComponent.Orientation.HORIZONTAL, LEGEND_UPDATE_FREQUENCY_MS);
    ArrayList<LegendRenderData> legendData = new ArrayList<>();
    legendData.add(lineChart.createLegendRenderData(javaSeries, MEMORY_AXIS_FORMATTER, dataRange));
    legendData.add(lineChart.createLegendRenderData(nativeSeries, MEMORY_AXIS_FORMATTER, dataRange));
    legendData.add(lineChart.createLegendRenderData(graphcisSeries, MEMORY_AXIS_FORMATTER, dataRange));
    legendData.add(lineChart.createLegendRenderData(stackSeries, MEMORY_AXIS_FORMATTER, dataRange));
    legendData.add(lineChart.createLegendRenderData(codeSeries, MEMORY_AXIS_FORMATTER, dataRange));
    legendData.add(lineChart.createLegendRenderData(otherSeries, MEMORY_AXIS_FORMATTER, dataRange));
    legendData.add(lineChart.createLegendRenderData(totalSeries, MEMORY_AXIS_FORMATTER, dataRange));
    legendData.add(lineChart.createLegendRenderData(objectSeries, OBJECT_COUNT_AXIS_FORMATTER, dataRange));
    legend.setLegendData(legendData);
    getChoreographer().register(legend);
    final JPanel legendPanel = new JBPanel(new BorderLayout());
    legendPanel.setOpaque(false);
    legendPanel.add(label, BorderLayout.WEST);
    legendPanel.add(legend, BorderLayout.EAST);
    monitorPanel.add(overlayPanel, new TabularLayout.Constraint(0, 0));
    monitorPanel.add(selection, new TabularLayout.Constraint(0, 0));
    monitorPanel.add(legendPanel, new TabularLayout.Constraint(0, 0));
    monitorPanel.add(axisPanel, new TabularLayout.Constraint(0, 0));
    monitorPanel.add(lineChartPanel, new TabularLayout.Constraint(0, 0));
    // Give monitor as much space as possible
    layout.setRowSizing(1, "*");
    panel.add(monitorPanel, new TabularLayout.Constraint(1, 0));
    return panel;
}
Also used : UIUtil(com.intellij.util.ui.UIUtil) Range(com.android.tools.adtui.model.Range) AllIcons(com.intellij.icons.AllIcons) RangedContinuousSeries(com.android.tools.adtui.model.RangedContinuousSeries) LineChart(com.android.tools.adtui.chart.linechart.LineChart) RangedSeries(com.android.tools.adtui.model.RangedSeries) Function(java.util.function.Function) Supplier(java.util.function.Supplier) ColoredTreeCellRenderer(com.intellij.ui.ColoredTreeCellRenderer) ArrayList(java.util.ArrayList) SingleUnitAxisFormatter(com.android.tools.adtui.common.formatter.SingleUnitAxisFormatter) EventMonitorView(com.android.tools.profilers.event.EventMonitorView) MemoryAxisFormatter(com.android.tools.adtui.common.formatter.MemoryAxisFormatter) OverlayComponent(com.android.tools.adtui.chart.linechart.OverlayComponent) BaseAxisFormatter(com.android.tools.adtui.common.formatter.BaseAxisFormatter) ColumnTreeBuilder(com.android.tools.adtui.common.ColumnTreeBuilder) Splitter(com.intellij.openapi.ui.Splitter) LineConfig(com.android.tools.adtui.chart.linechart.LineConfig) DurationData(com.android.tools.adtui.model.DurationData) ProfilerLayout(com.android.tools.profilers.ProfilerLayout) java.awt(java.awt) com.android.tools.adtui(com.android.tools.adtui) IconLoader(com.intellij.openapi.util.IconLoader) com.android.tools.profilers(com.android.tools.profilers) DurationDataRenderer(com.android.tools.adtui.chart.linechart.DurationDataRenderer) ClassObject(com.android.tools.profilers.memory.adapters.ClassObject) JBPanel(com.intellij.ui.components.JBPanel) EventMonitor(com.android.tools.profilers.event.EventMonitor) ApplicationManager(com.intellij.openapi.application.ApplicationManager) CaptureObject(com.android.tools.profilers.memory.adapters.CaptureObject) NotNull(org.jetbrains.annotations.NotNull) Comparator(java.util.Comparator) TimeAxisFormatter(com.android.tools.adtui.common.formatter.TimeAxisFormatter) javax.swing(javax.swing) ColumnTreeBuilder(com.android.tools.adtui.common.ColumnTreeBuilder) DurationDataRenderer(com.android.tools.adtui.chart.linechart.DurationDataRenderer) ArrayList(java.util.ArrayList) RangedContinuousSeries(com.android.tools.adtui.model.RangedContinuousSeries) EventMonitorView(com.android.tools.profilers.event.EventMonitorView) EventMonitor(com.android.tools.profilers.event.EventMonitor) Range(com.android.tools.adtui.model.Range) LineConfig(com.android.tools.adtui.chart.linechart.LineConfig) RangedSeries(com.android.tools.adtui.model.RangedSeries) JBPanel(com.intellij.ui.components.JBPanel) OverlayComponent(com.android.tools.adtui.chart.linechart.OverlayComponent) LineChart(com.android.tools.adtui.chart.linechart.LineChart) NotNull(org.jetbrains.annotations.NotNull)

Aggregations

Range (com.android.tools.adtui.model.Range)4 RangedSeries (com.android.tools.adtui.model.RangedSeries)4 DefaultDataSeries (com.android.tools.adtui.model.DefaultDataSeries)3 java.awt (java.awt)3 javax.swing (javax.swing)3 NotNull (org.jetbrains.annotations.NotNull)3 com.android.tools.adtui (com.android.tools.adtui)2 AnimatedTimeRange (com.android.tools.adtui.AnimatedTimeRange)2 StateChart (com.android.tools.adtui.chart.StateChart)2 JBColor (com.intellij.ui.JBColor)2 ItemEvent (java.awt.event.ItemEvent)2 ArrayList (java.util.ArrayList)2 Arrays (java.util.Arrays)2 EnumMap (java.util.EnumMap)2 Animatable (com.android.tools.adtui.Animatable)1 AnimatedComponent (com.android.tools.adtui.AnimatedComponent)1 AxisComponent (com.android.tools.adtui.AxisComponent)1 DurationDataRenderer (com.android.tools.adtui.chart.linechart.DurationDataRenderer)1 LineChart (com.android.tools.adtui.chart.linechart.LineChart)1 LineConfig (com.android.tools.adtui.chart.linechart.LineConfig)1