code: package org.gridkit.jvmtool.stacktrace.analytics;
  
  import org.gridkit.jvmtool.stacktrace.ThreadSnapshot;
  
  class NativeAggregatorFactory implements ThreadDumpAggregator, ThreadDumpAggregatorFactory {
  
      @Override
      public ThreadDumpAggregator newInstance() {
          return new NativeAggregatorFactory();
      }
  
      long total;
      long matched;
  
      @Override
      public void aggregate(ThreadSnapshot threadInfo) {
          ++total;
          if (threadInfo.stackTrace().isEmpty() || threadInfo.stackTrace().frameAt(0).isNative()) {
              ++matched;
          }
  
      }
  
      @Override
      public Object info() {
          if (total > 0) {
              return ((double)matched) / total;
          }
          else {
              return Double.NaN;
          }
      }
  }
  