View Javadoc

1   /*
2    * Copyright 2009 Red Hat, Inc.
3    *
4    * Red Hat licenses this file to you under the Apache License, version 2.0
5    * (the "License"); you may not use this file except in compliance with the
6    * License.  You may obtain a copy of the License at:
7    *
8    *    http://www.apache.org/licenses/LICENSE-2.0
9    *
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
12   * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
13   * License for the specific language governing permissions and limitations
14   * under the License.
15   */
16  package org.jboss.netty.channel;
17  
18  
19  /**
20   * The {@link ReceiveBufferSizePredictorFactory} that creates a new
21   * {@link AdaptiveReceiveBufferSizePredictor}.
22   *
23   * @author <a href="http://www.jboss.org/netty/">The Netty Project</a>
24   * @author <a href="http://gleamynode.net/">Trustin Lee</a>
25   *
26   * @version $Rev: 2080 $, $Date: 2010-01-26 18:04:19 +0900 (Tue, 26 Jan 2010) $
27   */
28  public class AdaptiveReceiveBufferSizePredictorFactory implements
29          ReceiveBufferSizePredictorFactory {
30  
31      private final int minimum;
32      private final int initial;
33      private final int maximum;
34  
35      /**
36       * Creates a new factory with the default parameters.  With the default
37       * parameters, the expected buffer size starts from {@code 1024}, does not
38       * go down below {@code 64}, and does not go up above {@code 65536}.
39       */
40      public AdaptiveReceiveBufferSizePredictorFactory() {
41          this(AdaptiveReceiveBufferSizePredictor.DEFAULT_MINIMUM,
42                  AdaptiveReceiveBufferSizePredictor.DEFAULT_INITIAL,
43                  AdaptiveReceiveBufferSizePredictor.DEFAULT_MAXIMUM);
44      }
45  
46      /**
47       * Creates a new factory with the specified parameters.
48       *
49       * @param minimum  the inclusive lower bound of the expected buffer size
50       * @param initial  the initial buffer size when no feed back was received
51       * @param maximum  the inclusive upper bound of the expected buffer size
52       */
53      public AdaptiveReceiveBufferSizePredictorFactory(int minimum, int initial, int maximum) {
54          if (minimum <= 0) {
55              throw new IllegalArgumentException("minimum: " + minimum);
56          }
57          if (initial < minimum) {
58              throw new IllegalArgumentException("initial: " + initial);
59          }
60          if (maximum < initial) {
61              throw new IllegalArgumentException("maximum: " + maximum);
62          }
63  
64          this.minimum = minimum;
65          this.initial = initial;
66          this.maximum = maximum;
67      }
68  
69      public ReceiveBufferSizePredictor getPredictor() throws Exception {
70          return new AdaptiveReceiveBufferSizePredictor(minimum, initial, maximum);
71      }
72  }