ThreadObserverI.java
// Copyright (c) ZeroC, Inc.
package com.zeroc.Ice;
import com.zeroc.Ice.Instrumentation.ThreadObserver;
import com.zeroc.Ice.Instrumentation.ThreadState;
import com.zeroc.IceMX.Observer;
import com.zeroc.IceMX.ObserverWithDelegate;
import com.zeroc.IceMX.ThreadMetrics;
/**
* @hidden Public because it's used by IceMX (via reflection).
*/
public class ThreadObserverI
extends ObserverWithDelegate<ThreadMetrics, ThreadObserver>
implements ThreadObserver {
@Override
public void stateChanged(final ThreadState oldState, final ThreadState newState) {
_oldState = oldState;
_newState = newState;
forEach(_threadStateUpdate);
if (_delegate != null) {
_delegate.stateChanged(oldState, newState);
}
}
private final Observer.MetricsUpdate<ThreadMetrics> _threadStateUpdate =
new Observer.MetricsUpdate<ThreadMetrics>() {
@Override
public void update(ThreadMetrics v) {
switch (_oldState) {
case ThreadStateInUseForIO -> --v.inUseForIO;
case ThreadStateInUseForUser -> --v.inUseForUser;
case ThreadStateInUseForOther -> --v.inUseForOther;
default -> {}
}
switch (_newState) {
case ThreadStateInUseForIO -> ++v.inUseForIO;
case ThreadStateInUseForUser -> ++v.inUseForUser;
case ThreadStateInUseForOther -> ++v.inUseForOther;
default -> {}
}
}
};
private ThreadState _oldState;
private ThreadState _newState;
}