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;
                        break;
                    case ThreadStateInUseForUser:
                        --v.inUseForUser;
                        break;
                    case ThreadStateInUseForOther:
                        --v.inUseForOther;
                        break;
                    default:
                        break;
                }
                switch (_newState) {
                    case ThreadStateInUseForIO:
                        ++v.inUseForIO;
                        break;
                    case ThreadStateInUseForUser:
                        ++v.inUseForUser;
                        break;
                    case ThreadStateInUseForOther:
                        ++v.inUseForOther;
                        break;
                    default:
                        break;
                }
            }
        };

    private ThreadState _oldState;
    private ThreadState _newState;
}