Ejemplo n.º 1
0
  protected void report(String resource_key, long bytes) {
    if (progress_listeners.size() > 0) {

      report(resource_key, DisplayFormatters.formatByteCountToKiBEtc(bytes));
    }
  }
  private void buildOptions(
      final Composite parent, final PlatformManager platform, final Composite area, boolean rebuild)
      throws PlatformManagerException {
    if (rebuild) {

      Control[] kids = area.getChildren();

      for (Control k : kids) {
        k.dispose();
      }
    }

    String[] options = platform.getExplicitVMOptions();

    {
      // max mem

      long max_mem = AEMemoryMonitor.getJVMLongOption(options, "-Xmx");

      final int MIN_MAX_JVM = 32 * 1024 * 1024;

      GridData gridData = new GridData();
      Label label = new Label(area, SWT.NULL);
      label.setLayoutData(gridData);
      Messages.setLanguageText(label, "jvm.max.mem", new String[] {encodeDisplayLong(MIN_MAX_JVM)});

      gridData = new GridData();
      gridData.widthHint = 125;
      final StringParameter max_vm = new StringParameter(area, "jvm.max.mem", "", false);
      max_vm.setLayoutData(gridData);

      max_vm.setValue(max_mem == -1 ? "" : encodeDisplayLong(max_mem));

      max_vm.addChangeListener(
          new ParameterChangeAdapter() {
            private String last_value;

            public void parameterChanged(Parameter p, boolean caused_internally) {
              if (max_vm.isDisposed()) {

                max_vm.removeChangeListener(this);

                return;
              }

              String val = max_vm.getValue();

              if (last_value != null && last_value.equals(val)) {

                return;
              }

              last_value = val;

              try {
                long max_mem = decodeDisplayLong(val);

                if (max_mem < MIN_MAX_JVM) {

                  throw (new Exception("Min=" + encodeDisplayLong(MIN_MAX_JVM)));
                }

                String[] options = platform.getExplicitVMOptions();

                options = AEMemoryMonitor.setJVMLongOption(options, "-Xmx", max_mem);

                long min_mem = AEMemoryMonitor.getJVMLongOption(options, "-Xms");

                if (min_mem == -1 || min_mem > max_mem) {

                  options = AEMemoryMonitor.setJVMLongOption(options, "-Xms", max_mem);
                }

                platform.setExplicitVMOptions(options);

                buildOptions(parent, platform, area, true);

              } catch (Throwable e) {

                String param_name = MessageText.getString("jvm.max.mem");

                int pos = param_name.indexOf('[');

                if (pos != -1) {

                  param_name = param_name.substring(0, pos).trim();
                }

                MessageBoxShell mb =
                    new MessageBoxShell(
                        SWT.ICON_ERROR | SWT.OK,
                        MessageText.getString("ConfigView.section.invalid.value.title"),
                        MessageText.getString(
                            "ConfigView.section.invalid.value",
                            new String[] {val, param_name, Debug.getNestedExceptionMessage(e)}));

                mb.setParent(parent.getShell());
                mb.open(null);
              }
            }
          });

      label = new Label(area, SWT.NULL);
      gridData = new GridData(GridData.FILL_HORIZONTAL);
      label.setLayoutData(gridData);

      Long max_heap_mb = AEMemoryMonitor.getMaxHeapMB();

      if (max_heap_mb > 0) {

        Messages.setLanguageText(
            label,
            "jvm.max.mem.current",
            new String[] {
              DisplayFormatters.formatByteCountToKiBEtc(max_heap_mb * 1024 * 1024, true)
            });
      }
    }

    {
      // min mem

      final int MIN_MIN_JVM = 8 * 1024 * 1024;

      long min_mem = AEMemoryMonitor.getJVMLongOption(options, "-Xms");

      GridData gridData = new GridData();
      Label label = new Label(area, SWT.NULL);
      label.setLayoutData(gridData);
      Messages.setLanguageText(label, "jvm.min.mem", new String[] {encodeDisplayLong(MIN_MIN_JVM)});

      gridData = new GridData();
      gridData.widthHint = 125;
      final StringParameter min_vm = new StringParameter(area, "jvm.min.mem", "", false);
      min_vm.setLayoutData(gridData);

      min_vm.setValue(min_mem == -1 ? "" : encodeDisplayLong(min_mem));

      min_vm.addChangeListener(
          new ParameterChangeAdapter() {
            private String last_value;

            public void parameterChanged(Parameter p, boolean caused_internally) {
              if (min_vm.isDisposed()) {

                min_vm.removeChangeListener(this);

                return;
              }

              String val = min_vm.getValue();

              if (last_value != null && last_value.equals(val)) {

                return;
              }

              last_value = val;

              try {
                long min_mem = decodeDisplayLong(val);

                if (min_mem < MIN_MIN_JVM) {

                  throw (new Exception("Min=" + encodeDisplayLong(MIN_MIN_JVM)));
                }

                String[] options = platform.getExplicitVMOptions();

                options = AEMemoryMonitor.setJVMLongOption(options, "-Xms", min_mem);

                long max_mem = AEMemoryMonitor.getJVMLongOption(options, "-Xmx");

                if (max_mem == -1 || max_mem < min_mem) {

                  options = AEMemoryMonitor.setJVMLongOption(options, "-Xmx", min_mem);
                }

                platform.setExplicitVMOptions(options);

                buildOptions(parent, platform, area, true);

              } catch (Throwable e) {

                String param_name = MessageText.getString("jvm.min.mem");

                int pos = param_name.indexOf('[');

                if (pos != -1) {

                  param_name = param_name.substring(0, pos).trim();
                }

                MessageBoxShell mb =
                    new MessageBoxShell(
                        SWT.ICON_ERROR | SWT.OK,
                        MessageText.getString("ConfigView.section.invalid.value.title"),
                        MessageText.getString(
                            "ConfigView.section.invalid.value",
                            new String[] {val, param_name, Debug.getNestedExceptionMessage(e)}));

                mb.setParent(parent.getShell());
                mb.open(null);
              }
            }
          });

      label = new Label(area, SWT.NULL);
      gridData = new GridData(GridData.FILL_HORIZONTAL);
      label.setLayoutData(gridData);
    }

    {
      // max DIRECT mem

      final int MIN_DIRECT_JVM = 32 * 1024 * 1024;

      final String OPTION_KEY = "-XX:MaxDirectMemorySize=";

      long max_direct = AEMemoryMonitor.getJVMLongOption(options, OPTION_KEY);

      GridData gridData = new GridData();
      Label label = new Label(area, SWT.NULL);
      label.setLayoutData(gridData);
      Messages.setLanguageText(
          label, "jvm.max.direct.mem", new String[] {encodeDisplayLong(MIN_DIRECT_JVM)});

      gridData = new GridData();
      gridData.widthHint = 125;
      final StringParameter max_direct_vm =
          new StringParameter(area, "jvm.max.direct.mem", "", false);
      max_direct_vm.setLayoutData(gridData);

      max_direct_vm.setValue(max_direct == -1 ? "" : encodeDisplayLong(max_direct));

      max_direct_vm.addChangeListener(
          new ParameterChangeAdapter() {
            private String last_value;

            public void parameterChanged(Parameter p, boolean caused_internally) {
              if (max_direct_vm.isDisposed()) {

                max_direct_vm.removeChangeListener(this);

                return;
              }

              String val = max_direct_vm.getValue();

              if (last_value != null && last_value.equals(val)) {

                return;
              }

              last_value = val;

              try {
                long max_direct = decodeDisplayLong(val);

                if (max_direct < MIN_DIRECT_JVM) {

                  throw (new Exception("Min=" + encodeDisplayLong(MIN_DIRECT_JVM)));
                }

                String[] options = platform.getExplicitVMOptions();

                options = AEMemoryMonitor.setJVMLongOption(options, OPTION_KEY, max_direct);

                platform.setExplicitVMOptions(options);

                buildOptions(parent, platform, area, true);

              } catch (Throwable e) {

                String param_name = MessageText.getString("jvm.max.direct.mem");

                int pos = param_name.indexOf('[');

                if (pos != -1) {

                  param_name = param_name.substring(0, pos).trim();
                }

                MessageBoxShell mb =
                    new MessageBoxShell(
                        SWT.ICON_ERROR | SWT.OK,
                        MessageText.getString("ConfigView.section.invalid.value.title"),
                        MessageText.getString(
                            "ConfigView.section.invalid.value",
                            new String[] {val, param_name, Debug.getNestedExceptionMessage(e)}));

                mb.setParent(parent.getShell());
                mb.open(null);
              }
            }
          });

      label = new Label(area, SWT.NULL);
      gridData = new GridData(GridData.FILL_HORIZONTAL);
      label.setLayoutData(gridData);
      Messages.setLanguageText(label, "jvm.max.direct.mem.info");
    }

    // all options

    Label label = new Label(area, SWT.NULL);
    GridData gridData = new GridData(GridData.FILL_HORIZONTAL);
    gridData.horizontalSpan = 3;
    label.setLayoutData(gridData);
    Messages.setLanguageText(label, "jvm.options.summary");

    for (String option : options) {

      label = new Label(area, SWT.NULL);
      label.setText(option);
      gridData = new GridData();
      gridData.horizontalSpan = 3;
      gridData.horizontalIndent = 20;
      label.setLayoutData(gridData);
    }

    if (rebuild) {

      parent.layout(true, true);
    }
  }