private Result getResult()

in core/org.openjdk.jmc.flightrecorder.rules.jdk/src/main/java/org/openjdk/jmc/flightrecorder/rules/jdk/general/DiscouragedGcOptionsRule.java [66:101]


	private Result getResult(IItemCollection items, IPreferenceValueProvider valueProvider) {
		EventAvailability eventAvailability = RulesToolkit.getEventAvailability(items, JdkTypeIDs.CPU_INFORMATION);
		if (eventAvailability == EventAvailability.UNKNOWN || eventAvailability == EventAvailability.DISABLED) {
			return RulesToolkit.getEventAvailabilityResult(this, items, eventAvailability, JdkTypeIDs.CPU_INFORMATION);
		}

		IQuantity parallelGCThreads = items.getAggregate(JdkAggregators.PARALLEL_GC_THREAD_COUNT_MAX);
		IQuantity minHwThreads = items.getAggregate(JdkAggregators.MIN_HW_THREADS);
		CollectorType oc = CollectorType.getOldCollectorType(items);
		if (parallelGCThreads != null && minHwThreads != null && oc != null) {
			if (oc == CollectorType.SERIAL_OLD) {
				IQuantity maxHeapSize = items.getAggregate(JdkAggregators.HEAP_CONF_MAX_SIZE);
				if (minHwThreads.compareTo(HW_THREADS_FOR_MULTI_CPU) >= 0 && maxHeapSize != null
						&& maxHeapSize.compareTo(LARGE_HEAP) > 0) {
					return new Result(this, 50, Messages.getString(Messages.SerialGcOnMultiCpuRuleFactory_TEXT_INFO),
							Messages.getString(Messages.SerialGcOnMultiCpuRuleFactory_TEXT_INFO_LONG));
				}
			} else if (minHwThreads.compareTo(ONE) == 0 && oc == CollectorType.PARALLEL_OLD) {
				return new Result(this, 50, Messages.getString(Messages.ParallelOnSingleCpuRuleFactory_TEXT_INFO),
						Messages.getString(Messages.ParallelOnSingleCpuRuleFactory_TEXT_INFO_LONG));
			} else if (parallelGCThreads.compareTo(minHwThreads) > 0) {
				String message = MessageFormat.format(
						Messages.getString(Messages.NumberOfGcThreadsRuleFactory_TEXT_INFO), parallelGCThreads,
						minHwThreads.displayUsing(IDisplayable.AUTO));
				String longMessage = message + " " //$NON-NLS-1$
						+ Messages.getString(Messages.NumberOfGcThreadsRuleFactory_TEXT_INFO_LONG);
				return new Result(this, 50, message, longMessage);
			} else if (parallelGCThreads.compareTo(ONE) == 0
					&& (oc == CollectorType.PARALLEL_OLD || oc == CollectorType.G1_OLD)) {
				return new Result(this, 50, Messages.getString(Messages.ParGcFewThreadsRuleFactory_TEXT_INFO),
						Messages.getString(Messages.ParGcFewThreadsRuleFactory_TEXT_INFO_LONG));
			}
			return new Result(this, 0, Messages.getString(Messages.DiscouragedGcOptionsRule_TEXT_OK));
		}
		return RulesToolkit.getTooFewEventsResult(this);
	}