Merge
authormikael
Mon, 05 Aug 2019 16:27:30 -0700
changeset 57650 8f067351c370
parent 57639 b5ab9a71aa95 (current diff)
parent 57649 b2fde6701654 (diff)
child 57651 ddae2da329ed
Merge
.hgtags
test/hotspot/jtreg/runtime/cds/CheckDefaultArchiveFile.java
test/lib/jdk/test/lib/containers/cgroup/MetricsTester.java
--- a/.hgtags	Mon Aug 05 13:18:31 2019 -0700
+++ b/.hgtags	Mon Aug 05 16:27:30 2019 -0700
@@ -577,4 +577,5 @@
 443f7359b34d60e7821216ffc60f88b6ffe0ccdd jdk-14+6
 6a159c6c23ccd0029140ab91653442e412305ce5 jdk-13+31
 28ab01c067551ef158abaef08e154e1051ca0893 jdk-14+7
+929f37a9c35d530d4e866f6e832001aeb4cfb371 jdk-13+32
 c0023e364b6f130cb1e93747b796d8718d544db1 jdk-14+8
--- a/src/hotspot/share/jfr/leakprofiler/checkpoint/objectSampleCheckpoint.cpp	Mon Aug 05 13:18:31 2019 -0700
+++ b/src/hotspot/share/jfr/leakprofiler/checkpoint/objectSampleCheckpoint.cpp	Mon Aug 05 16:27:30 2019 -0700
@@ -181,34 +181,33 @@
   }
 };
 
-void ObjectSampleCheckpoint::install(JfrCheckpointWriter& writer, bool class_unload) {
+void ObjectSampleCheckpoint::install(JfrCheckpointWriter& writer, bool class_unload, bool type_set) {
   if (!writer.has_data()) {
     return;
   }
 
   assert(writer.has_data(), "invariant");
   const JfrCheckpointBlobHandle h_cp = writer.checkpoint_blob();
+  CheckpointInstall install(h_cp);
 
   // Class unload implies a safepoint.
   // Not class unload implies the object sampler is locked, because it was claimed exclusively earlier.
   // Therefore: direct access the object sampler instance is safe.
-  const ObjectSampler* const object_sampler = ObjectSampler::sampler();
+  ObjectSampler* const object_sampler = ObjectSampler::sampler();
   assert(object_sampler != NULL, "invariant");
 
   ObjectSample* const last = const_cast<ObjectSample*>(object_sampler->last());
   const ObjectSample* const last_resolved = object_sampler->last_resolved();
-  CheckpointInstall install(h_cp);
 
-  if (class_unload) {
-    // all samples need class unload information
-    do_samples(last, NULL, install);
-    return;
-  }
-
-  // only new samples since last resolved checkpoint
+  // install only to new samples since last resolved checkpoint
   if (last != last_resolved) {
     do_samples(last, last_resolved, install);
-    const_cast<ObjectSampler*>(object_sampler)->set_last_resolved(last);
+    if (class_unload) {
+      return;
+    }
+    if (type_set) {
+      object_sampler->set_last_resolved(last);
+    }
   }
 }
 
@@ -289,6 +288,6 @@
   JfrStackTraceRepository::write_metadata(writer);
 
   // install the stacktrace checkpoint information to the candidates
-  ObjectSampleCheckpoint::install(writer, false);
+  ObjectSampleCheckpoint::install(writer, false, false);
   return true;
 }
--- a/src/hotspot/share/jfr/leakprofiler/checkpoint/objectSampleCheckpoint.hpp	Mon Aug 05 13:18:31 2019 -0700
+++ b/src/hotspot/share/jfr/leakprofiler/checkpoint/objectSampleCheckpoint.hpp	Mon Aug 05 16:27:30 2019 -0700
@@ -35,7 +35,7 @@
 
 class ObjectSampleCheckpoint : AllStatic {
  public:
-  static void install(JfrCheckpointWriter& writer, bool class_unload);
+  static void install(JfrCheckpointWriter& writer, bool class_unload, bool type_set);
   static void write(ObjectSampler* sampler, EdgeStore* edge_store, bool emit_all, Thread* thread);
   static int mark(ObjectSampler* sampler, ObjectSampleMarker& marker, bool emit_all);
 };
--- a/src/hotspot/share/jfr/recorder/checkpoint/types/jfrType.cpp	Mon Aug 05 13:18:31 2019 -0700
+++ b/src/hotspot/share/jfr/recorder/checkpoint/types/jfrType.cpp	Mon Aug 05 16:27:30 2019 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 2019, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -311,7 +311,7 @@
   if (LeakProfiler::is_running()) {
     JfrCheckpointWriter leakp_writer(false, true, Thread::current());
     type_set.write(writer, &leakp_writer);
-    ObjectSampleCheckpoint::install(leakp_writer, true);
+    ObjectSampleCheckpoint::install(leakp_writer, true, true);
     return;
   }
   type_set.write(writer, NULL);
@@ -322,7 +322,7 @@
   if (LeakProfiler::is_running()) {
     JfrCheckpointWriter leakp_writer(false, true, Thread::current());
     type_set.write(writer, &leakp_writer);
-    ObjectSampleCheckpoint::install(leakp_writer, false);
+    ObjectSampleCheckpoint::install(leakp_writer, false, true);
     return;
   }
   type_set.write(writer, NULL);
--- a/src/java.base/windows/native/libnio/ch/Net.c	Mon Aug 05 13:18:31 2019 -0700
+++ b/src/java.base/windows/native/libnio/ch/Net.c	Mon Aug 05 16:27:30 2019 -0700
@@ -623,9 +623,6 @@
     fd_set rd, wr, ex;
     jint fd = fdval(env, fdo);
 
-    t.tv_sec = (long)(timeout / 1000);
-    t.tv_usec = (timeout % 1000) * 1000;
-
     FD_ZERO(&rd);
     FD_ZERO(&wr);
     FD_ZERO(&ex);
@@ -638,7 +635,12 @@
     }
     FD_SET(fd, &ex);
 
-    rv = select(fd+1, &rd, &wr, &ex, &t);
+    if (timeout >= 0) {
+        t.tv_sec = (long)(timeout / 1000);
+        t.tv_usec = (timeout % 1000) * 1000;
+    }
+
+    rv = select(fd+1, &rd, &wr, &ex, (timeout >= 0) ? &t : NULL);
 
     /* save last winsock error */
     if (rv == SOCKET_ERROR) {
--- a/src/java.desktop/share/classes/com/sun/java/swing/plaf/gtk/GTKPainter.java	Mon Aug 05 13:18:31 2019 -0700
+++ b/src/java.desktop/share/classes/com/sun/java/swing/plaf/gtk/GTKPainter.java	Mon Aug 05 16:27:30 2019 -0700
@@ -535,6 +535,34 @@
         }
     }
 
+    private int getBrightness(Color c) {
+        return Math.max(c.getRed(), Math.max(c.getGreen(), c.getBlue()));
+    }
+
+    private int getMaxColorDiff(Color c1, Color c2) {
+        return Math.max(Math.abs(c1.getRed() - c2.getRed()),
+                Math.max(Math.abs(c1.getGreen() - c2.getGreen()),
+                        Math.abs(c1.getBlue() - c2.getBlue())));
+    }
+
+    private int scaleColorComponent(int color, double scaleFactor) {
+        return (int)(color + color * scaleFactor);
+    }
+    private Color deriveColor(Color originalColor, int originalBrightness,
+                              int targetBrightness) {
+        int r, g, b;
+        if (originalBrightness == 0) {
+            r = g = b = targetBrightness;
+        } else {
+            double scaleFactor = (targetBrightness - originalBrightness)
+                    / originalBrightness    ;
+            r = scaleColorComponent(originalColor.getRed(), scaleFactor);
+            g = scaleColorComponent(originalColor.getGreen(), scaleFactor);
+            b = scaleColorComponent(originalColor.getBlue(), scaleFactor);
+        }
+        return new Color(r, g, b);
+    }
+
     //
     // MENU
     //
@@ -551,6 +579,57 @@
         int gtkState = GTKLookAndFeel.synthStateToGTKState(
                 context.getRegion(), context.getComponentState());
         if (gtkState == SynthConstants.MOUSE_OVER) {
+            if (GTKLookAndFeel.is3() && context.getRegion() == Region.MENU) {
+                GTKStyle style = (GTKStyle)context.getStyle();
+                Color highlightColor = style.getGTKColor(
+                        GTKEngine.WidgetType.MENU_ITEM.ordinal(),
+                        gtkState, ColorType.BACKGROUND.getID());
+                Color backgroundColor = style.getGTKColor(
+                        GTKEngine.WidgetType.MENU_BAR.ordinal(),
+                        SynthConstants.ENABLED, ColorType.BACKGROUND.getID());
+
+                int minBrightness = 0, maxBrightness = 255;
+                int minBrightnessDifference = 100;
+                int actualBrightnessDifference =
+                        getMaxColorDiff(highlightColor, backgroundColor);
+                if (actualBrightnessDifference < minBrightnessDifference) {
+                    int highlightBrightness =
+                            getBrightness(highlightColor);
+                    int backgroundBrightness =
+                            getBrightness(backgroundColor);
+                    int originalHighlightBrightness =
+                            highlightBrightness;
+                    if (highlightBrightness >= backgroundBrightness) {
+                        if (backgroundBrightness + minBrightnessDifference <=
+                                maxBrightness) {
+                            highlightBrightness =
+                                    backgroundBrightness +
+                                            minBrightnessDifference;
+                        } else {
+                            highlightBrightness =
+                                    backgroundBrightness -
+                                            minBrightnessDifference;
+                        }
+                    } else {
+                        if (backgroundBrightness - minBrightnessDifference >=
+                                minBrightness) {
+                            highlightBrightness =
+                                    backgroundBrightness -
+                                            minBrightnessDifference;
+                        } else {
+                            highlightBrightness =
+                                    backgroundBrightness +
+                                            minBrightnessDifference;
+                        }
+                    }
+
+                    g.setColor(deriveColor(highlightColor,
+                            originalHighlightBrightness,
+                            highlightBrightness));
+                    g.fillRect(x, y, w, h);
+                    return;
+                }
+            }
             Region id = Region.MENU_ITEM;
             synchronized (UNIXToolkit.GTK_LOCK) {
                 if (! ENGINE.paintCachedImage(g, x, y, w, h, id)) {
--- a/src/java.desktop/share/classes/com/sun/java/swing/plaf/gtk/GTKStyle.java	Mon Aug 05 13:18:31 2019 -0700
+++ b/src/java.desktop/share/classes/com/sun/java/swing/plaf/gtk/GTKStyle.java	Mon Aug 05 16:27:30 2019 -0700
@@ -205,6 +205,14 @@
         return getGTKColor(null, state, type);
     }
 
+    Color getGTKColor(int widgetType, int state, int colorType) {
+        synchronized (sun.awt.UNIXToolkit.GTK_LOCK) {
+            int rgb = nativeGetColorForState(widgetType, state,
+                    colorType);
+            return new ColorUIResource(rgb);
+        }
+    }
+
     /**
      * Returns the color for the specified state.
      *
--- a/src/java.desktop/unix/native/libawt_xawt/awt/awt_InputMethod.c	Mon Aug 05 13:18:31 2019 -0700
+++ b/src/java.desktop/unix/native/libawt_xawt/awt/awt_InputMethod.c	Mon Aug 05 16:27:30 2019 -0700
@@ -1679,7 +1679,7 @@
 {
     X11InputMethodData *pX11IMData = NULL;
     char * ret = NULL;
-#if defined(_LP64) && !defined(_LITTLE_ENDIAN)
+#if defined(__linux__) && defined(_LP64) && !defined(_LITTLE_ENDIAN)
     // XIMPreeditState value which is used for XGetICValues must be 32bit on BigEndian XOrg's xlib
     unsigned int state = XIMPreeditUnKnown;
 #else