@Override
    public void appendNodeHistogram(final TimeWindow timeWindow, final NodeList nodeList, final LinkList linkList, final long timeoutMillis) {
        if (nodeList == null) {
            return;
        }
        final Collection<Node> nodes = nodeList.getNodeList();
        if (CollectionUtils.isEmpty(nodes)) {
            return;
        }
        final Node[] nodeArray = nodes.toArray(new Node[0]);
        final CompletableFuture<List<NodeHistogram>> future = getNodeHistogramList(timeWindow, nodeArray, linkList);
        List<NodeHistogram> result = allOf(future, timeoutMillis, nodeHistogramFactory::cancel);
        bindHistogramToNode(nodeArray, result);
    }
@author HyunGil Jeong
@author jaehong.kim
web/src/main/java/com/navercorp/pinpoint/web/applicationmap/appender/histogram/DefaultNodeHistogramAppender.java