Странное поведение CGLayerCreateWithContext на iPad 2 против нового iPad?

В приложении Single View приложение FooView является основным. В FooView drawRect, если я сделаю

if (!self.layer1) {
    CGContextRef context = UIGraphicsGetCurrentContext();
    NSLog(@"current context is drawRect is %@", context);

    self.layer1 = CGLayerCreateWithContext(context, self.bounds.size, NULL);
    NSLog(@"layer1 is %@", self.layer1);

    self.context1 = CGLayerGetContext(self.layer1);

    CGContextSetFillColorWithColor(self.context1, [[UIColor orangeColor] CGColor]);
}

CGContextRef context = UIGraphicsGetCurrentContext();

NSDate *start = [NSDate date];
CGContextDrawLayerAtPoint(context, CGPointZero, self.layer1);
NSTimeInterval timeInterval = -[start timeIntervalSinceNow];
NSLog(@"It took %f to draw", timeInterval);

И я использую CADisplayLink вызвать метод, который вызывает [self.view setNeedsDisplay] в контроллере вида, так что drawRect вызывается каждый 1 кадр, или 5 кадров, или 20 кадров, используя frameInterval имущество.

На iPad2 время рисования, когда CGLayer заполнен сотнями прямоугольников размером 6x6, составляет от 0,011 до 0,012 секунды, как указано в инструкции NSLog. Это способно к 60 кадрам в секунду. (60 кадров в секунду - 0,01666 секунды на кадр)

Если я изменю строку на:

    self.layer1 = CGLayerCreateWithContext(NULL, self.bounds.size, NULL);

(с помощью NULL вместо context). Тогда время составляет около 0,014 секунды, что все еще хорошо для 60 кадров в секунду.

Но на новом iPad происходит обратное: если context был использован на этой линии, а затем время колоссальные 0,17 секунды... что не хорошо даже для 6 кадров в секунду. Если NULL используется, тогда время составляет 0,038, что не хорошо для 60 кадров в секунду, но по крайней мере это хорошо для 20 кадров в секунду, что все еще приемлемо. Кто-нибудь знает, почему он так себя ведет и как заставить его работать хорошо или лучше на всех платформах iPad, iPad 2 и New iPad?

Если звонит CGLayerCreateWithContext с NULL дал кешированный графический контекст графического процессора и вызов с context дал растровый контекст, то почему на iPad2, это на самом деле быстрее, если вызов CGLayerCreateWithContext с context?

(Я использую iOS 5.1.1 на новом iPad и iOS 5.1 на iPad 2... что не должно быть такой большой разницей... и я не хочу обновлять iPad2, чтобы иметь другой устройство с другой версией iOS для проверки моего приложения).

0 ответов

Другие вопросы по тегам