1
1
package com .tagtraum .perf .gcviewer .view ;
2
2
3
- import java .awt .Color ;
4
- import java .awt .Component ;
5
- import java .awt .Dimension ;
6
- import java .awt .Font ;
7
- import java .awt .FontMetrics ;
8
- import java .awt .Graphics ;
9
- import java .awt .GridBagConstraints ;
10
- import java .awt .GridBagLayout ;
11
- import java .awt .Rectangle ;
3
+ import com .tagtraum .perf .gcviewer .model .GCModel ;
4
+ import com .tagtraum .perf .gcviewer .util .TimeFormat ;
5
+ import com .tagtraum .perf .gcviewer .view .model .GCPreferences ;
6
+ import com .tagtraum .perf .gcviewer .view .model .PropertyChangeEventConsts ;
7
+ import com .tagtraum .perf .gcviewer .view .renderer .*;
8
+
9
+ import javax .swing .*;
10
+ import javax .swing .event .ChangeEvent ;
11
+ import javax .swing .event .ChangeListener ;
12
+ import javax .swing .event .SwingPropertyChangeSupport ;
13
+ import java .awt .*;
12
14
import java .awt .event .ComponentEvent ;
13
15
import java .awt .event .ComponentListener ;
14
16
import java .awt .event .MouseAdapter ;
18
20
import java .text .DateFormat ;
19
21
import java .text .Format ;
20
22
import java .text .NumberFormat ;
23
+ import java .time .ZonedDateTime ;
21
24
import java .util .Date ;
22
25
import java .util .logging .Logger ;
23
26
24
- import javax .swing .JPanel ;
25
- import javax .swing .JPopupMenu ;
26
- import javax .swing .JScrollBar ;
27
- import javax .swing .JScrollPane ;
28
- import javax .swing .JViewport ;
29
- import javax .swing .event .ChangeEvent ;
30
- import javax .swing .event .ChangeListener ;
31
- import javax .swing .event .SwingPropertyChangeSupport ;
32
-
33
- import com .tagtraum .perf .gcviewer .model .GCModel ;
34
- import com .tagtraum .perf .gcviewer .util .TimeFormat ;
35
- import com .tagtraum .perf .gcviewer .view .model .GCPreferences ;
36
- import com .tagtraum .perf .gcviewer .view .model .PropertyChangeEventConsts ;
37
- import com .tagtraum .perf .gcviewer .view .renderer .ConcurrentGcBegionEndRenderer ;
38
- import com .tagtraum .perf .gcviewer .view .renderer .FullGCLineRenderer ;
39
- import com .tagtraum .perf .gcviewer .view .renderer .GCRectanglesRenderer ;
40
- import com .tagtraum .perf .gcviewer .view .renderer .GCTimesRenderer ;
41
- import com .tagtraum .perf .gcviewer .view .renderer .IncLineRenderer ;
42
- import com .tagtraum .perf .gcviewer .view .renderer .InitialMarkLevelRenderer ;
43
- import com .tagtraum .perf .gcviewer .view .renderer .PolygonChartRenderer ;
44
- import com .tagtraum .perf .gcviewer .view .renderer .TotalHeapRenderer ;
45
- import com .tagtraum .perf .gcviewer .view .renderer .TotalTenuredRenderer ;
46
- import com .tagtraum .perf .gcviewer .view .renderer .TotalYoungRenderer ;
47
- import com .tagtraum .perf .gcviewer .view .renderer .UsedHeapRenderer ;
48
- import com .tagtraum .perf .gcviewer .view .renderer .UsedTenuredRenderer ;
49
- import com .tagtraum .perf .gcviewer .view .renderer .UsedYoungRenderer ;
50
-
51
27
/**
52
28
* Graphical chart of the gc file. It contains the chart and all rulers surrounding it but not
53
29
* the model details on the right side.
59
35
public class ModelChartImpl extends JScrollPane implements ModelChart , ChangeListener , PropertyChangeListener {
60
36
61
37
private static final Logger LOGGER = Logger .getLogger (ModelChartImpl .class .getName ());
62
-
38
+
63
39
private GCModel model ;
64
40
private Chart chart ;
65
41
private JScrollBar horizontalScrollBar ;
@@ -182,7 +158,7 @@ public void componentHidden(ComponentEvent e) {}
182
158
timeOffsetPanel = new TimeOffsetPanel (timestampRulerPopup );
183
159
timestampRulerPopup .add (timeOffsetPanel );
184
160
timeOffsetPanel .setCheckboxSelected (timestampRuler .getOffset () != 0 );
185
-
161
+
186
162
this .timestampRuler .addMouseListener (new MouseAdapter (){
187
163
public void mousePressed (MouseEvent e ) {
188
164
maybePopup (e );
@@ -199,14 +175,8 @@ private void maybePopup(MouseEvent e) {
199
175
timeOffsetPanel .setCheckboxSelected (true );
200
176
}
201
177
else {
202
- long suggestedStartDate = model .getLastModified ();
203
- if (model .hasDateStamp ()) {
204
- suggestedStartDate = model .getFirstDateStamp ().toInstant ().toEpochMilli ();
205
- }
206
- else if (model .hasCorrectTimestamp ()) {
207
- suggestedStartDate -= (long )(model .getRunningTime () * 1000.0d );
208
- }
209
- timeOffsetPanel .setDate (new Date (suggestedStartDate ));
178
+ ZonedDateTime suggestedStartDate = model .getStartDate ();
179
+ timeOffsetPanel .setDate (Date .from (suggestedStartDate .toInstant ()));
210
180
timeOffsetPanel .setCheckboxSelected (false );
211
181
}
212
182
timestampRulerPopup .show (e .getComponent (), e .getX (), e .getY ());
@@ -219,16 +189,16 @@ else if (model.hasCorrectTimestamp()) {
219
189
220
190
public void addTimeOffsetChangeListener (PropertyChangeListener listener ) {
221
191
this .timeOffsetPanel .addPropertyChangeListener (
222
- PropertyChangeEventConsts .TIMEOFFSETPANEL_STATE_CHANGED ,
192
+ PropertyChangeEventConsts .TIMEOFFSETPANEL_STATE_CHANGED ,
223
193
listener );
224
194
}
225
-
195
+
226
196
public void removeTimeOffsetChangeListener (PropertyChangeListener listener ) {
227
197
this .timeOffsetPanel .removePropertyChangeListener (
228
- PropertyChangeEventConsts .TIMEOFFSETPANEL_STATE_CHANGED ,
198
+ PropertyChangeEventConsts .TIMEOFFSETPANEL_STATE_CHANGED ,
229
199
listener );
230
200
}
231
-
201
+
232
202
public void invalidate () {
233
203
super .invalidate ();
234
204
chart .invalidate ();
@@ -405,7 +375,7 @@ public void setShowDateStamp(boolean showDateStamp) {
405
375
timestampRuler .revalidate ();
406
376
timestampRuler .repaint ();
407
377
}
408
-
378
+
409
379
@ Override
410
380
public boolean isShowDateStamp (){
411
381
return timestampRuler .getOffset () > 0 ;
@@ -541,7 +511,7 @@ private class Ruler extends JPanel {
541
511
private String unitName ;
542
512
private int minHalfDistance ;
543
513
private double offset ;
544
-
514
+
545
515
private SwingPropertyChangeSupport propertyChangeSupport ;
546
516
547
517
public Ruler (boolean vertical , double minUnit , double maxUnit , String unitName ) {
@@ -555,18 +525,18 @@ public Ruler(boolean vertical, double minUnit, double maxUnit, String unitName,
555
525
setMinUnit (minUnit );
556
526
setMaxUnit (maxUnit );
557
527
font = new Font ("sans-serif" , Font .PLAIN , 10 );
558
-
528
+
559
529
propertyChangeSupport = new SwingPropertyChangeSupport (this , true );
560
530
}
561
531
562
532
public void addPropertyChangeListener (PropertyChangeListener listener ) {
563
533
this .propertyChangeSupport .addPropertyChangeListener (listener );
564
534
}
565
-
535
+
566
536
public void removePropertyChangeListener (PropertyChangeListener listener ) {
567
537
this .propertyChangeSupport .removePropertyChangeListener (listener );
568
538
}
569
-
539
+
570
540
public void setSize (int width , int height ) {
571
541
super .setSize (width , height );
572
542
configureFormatter ();
@@ -579,7 +549,7 @@ public Dimension getPreferredSize() {
579
549
Dimension bestSize = null ;
580
550
if (isVertical ()) {
581
551
bestSize = new Dimension (minWidth , getHeight ());
582
- }
552
+ }
583
553
else {
584
554
bestSize = new Dimension ((int ) (runningTime * getScaleFactor ()), fm .getHeight ());
585
555
minHalfDistance = minWidth ;
@@ -691,7 +661,7 @@ private double getDateLineDistance() {
691
661
double oneHourDistance = lineDistance ;
692
662
while (lineDistance < 20 ) lineDistance += oneHourDistance ;
693
663
}
694
- }
664
+ }
695
665
else {
696
666
if (lineDistance < minHalfDistance * 2 ) lineDistance *= 10.0d ; // 10sec
697
667
if (lineDistance < minHalfDistance * 2 ) lineDistance *= 2.0d ; // 20sec
@@ -715,15 +685,15 @@ private double getNumberLineDistance() {
715
685
double lineDistance = getPixelsPerUnit () * Math .pow (10 , Math .ceil (-log10PixelPerUnit ) + 1 );
716
686
if (isVertical ()) {
717
687
while (lineDistance < 20 ) lineDistance *= 10.0d ;
718
- }
688
+ }
719
689
else {
720
690
while (lineDistance < minHalfDistance * 2 ) lineDistance *= 10.0d ;
721
691
}
722
692
return lineDistance ;
723
693
}
724
694
725
695
private double getPixelsPerUnit () {
726
- return isVertical ()
696
+ return isVertical ()
727
697
? getHeight () / (maxUnit - minUnit )
728
698
: (runningTime * getScaleFactor () / (maxUnit - minUnit ));
729
699
}
@@ -744,7 +714,7 @@ public void configureFormatter() {
744
714
if (digits < 1 ) {
745
715
((NumberFormat )formatter ).setMaximumFractionDigits ((int ) Math .abs (digits ) + 2 );
746
716
((NumberFormat )formatter ).setMinimumFractionDigits ((int ) Math .abs (digits ) + 2 );
747
- }
717
+ }
748
718
else {
749
719
((NumberFormat )formatter ).setMaximumFractionDigits (0 );
750
720
((NumberFormat )formatter ).setMinimumFractionDigits (0 );
@@ -787,14 +757,14 @@ public void propertyChange(PropertyChangeEvent evt) {
787
757
// and propagates the change outside firing its own event.
788
758
// Like this it is possible for the menu and the other ModelChartImpls inside one
789
759
// GCDocument to stay in sync.
790
-
760
+
791
761
if (PropertyChangeEventConsts .RULER_OFFSET_CHANGED .equals (evt .getPropertyName ())) {
792
762
// dateStampShown is true, if some offset is present (0 offset = only time shown)
793
763
boolean dateStampShown = ((Double )evt .getNewValue ()).doubleValue () > 0.0001 ;
794
764
firePropertyChange (
795
765
PropertyChangeEventConsts .MODELCHART_TIMESTAMP_RULER_FORMAT_CHANGED ,
796
766
!dateStampShown ,
797
- dateStampShown );
767
+ dateStampShown );
798
768
}
799
769
}
800
770
0 commit comments