久久福利_99r_国产日韩在线视频_直接看av的网站_中文欧美日韩_久久一

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

IOS中判斷卡頓的方案總結(jié)

瀏覽:89日期:2022-09-16 17:31:22
FPS

FPS (Frames Per Second) 是圖像領(lǐng)域中的定義,表示每秒渲染幀數(shù),通常用于衡量畫(huà)面的流暢度,每秒幀數(shù)越多,則表示畫(huà)面越流暢,60fps 最佳,一般我們的APP的FPS 只要保持在 50-60之間,用戶體驗(yàn)都是比較流暢的。

監(jiān)測(cè)FPS也有好幾種,這里只說(shuō)最常用的方案,我最早是在YYFPSLabel中看到的。實(shí)現(xiàn)原理實(shí)現(xiàn)原理是向主線程的RunLoop的添加一個(gè)commonModes的CADisplayLink,每次屏幕刷新的時(shí)候都要執(zhí)行CADisplayLink的方法,所以可以統(tǒng)計(jì)1s內(nèi)屏幕刷新的次數(shù),也就是FPS了,下面貼上我用Swift實(shí)現(xiàn)的代碼:

class WeakProxy: NSObject {weak var target: NSObjectProtocol?init(target: NSObjectProtocol) {self.target = targetsuper.init() }override func responds(to aSelector: Selector!) -> Bool {return (target?.responds(to: aSelector) ?? false) || super.responds(to: aSelector) }override func forwardingTarget(for aSelector: Selector!) -> Any? {return target }}class FPSLabel: UILabel {var link:CADisplayLink!//記錄方法執(zhí)行次數(shù)var count: Int = 0//記錄上次方法執(zhí)行的時(shí)間,通過(guò)link.timestamp - _lastTime計(jì)算時(shí)間間隔var lastTime: TimeInterval = 0var _font: UIFont!var _subFont: UIFont! fileprivate let defaultSize = CGSize(width: 55,height: 20)override init(frame: CGRect) {super.init(frame: frame)if frame.size.width == 0 && frame.size.height == 0 {self.frame.size = defaultSize}self.layer.cornerRadius = 5self.clipsToBounds = trueself.textAlignment = NSTextAlignment.centerself.isUserInteractionEnabled = falseself.backgroundColor = UIColor.white.withAlphaComponent(0.7)_font = UIFont(name: 'Menlo', size: 14)if _font != nil { _subFont = UIFont(name: 'Menlo', size: 4)}else{ _font = UIFont(name: 'Courier', size: 14) _subFont = UIFont(name: 'Courier', size: 4)}link = CADisplayLink(target: WeakProxy.init(target: self), selector: #selector(FPSLabel.tick(link:)))link.add(to: RunLoop.main, forMode: .commonModes) }//CADisplayLink 刷新執(zhí)行的方法@objc func tick(link: CADisplayLink) {guard lastTime != 0 else { lastTime = link.timestampreturn}count += 1let timePassed = link.timestamp - lastTime//時(shí)間大于等于1秒計(jì)算一次,也就是FPSLabel刷新的間隔,不希望太頻繁刷新guard timePassed >= 1 else {return}lastTime = link.timestamplet fps = Double(count) / timePassedcount = 0let progress = fps / 60.0let color = UIColor(hue: CGFloat(0.27 * (progress - 0.2)), saturation: 1, brightness: 0.9, alpha: 1)let text = NSMutableAttributedString(string: '(Int(round(fps))) FPS')text.addAttribute(NSAttributedStringKey.foregroundColor, value: color, range: NSRange(location: 0, length: text.length - 3))text.addAttribute(NSAttributedStringKey.foregroundColor, value: UIColor.white, range: NSRange(location: text.length - 3, length: 3))text.addAttribute(NSAttributedStringKey.font, value: _font, range: NSRange(location: 0, length: text.length))text.addAttribute(NSAttributedStringKey.font, value: _subFont, range: NSRange(location: text.length - 4, length: 1))self.attributedText = text }// 把displaylin從Runloop modes中移除deinit {link.invalidate() }required init?(coder aDecoder: NSCoder) {fatalError('init(coder:) has not been implemented') }}RunLoop

其實(shí)FPS中CADisplayLink的使用也是基于RunLoop,都依賴main RunLoop。我們來(lái)看看

先來(lái)看看簡(jiǎn)版的RunLoop的代碼

// 1.進(jìn)入loop__CFRunLoopRun(runloop, currentMode, seconds, returnAfterSourceHandled)// 2.RunLoop 即將觸發(fā) Timer 回調(diào)。__CFRunLoopDoObservers(runloop, currentMode, kCFRunLoopBeforeTimers);// 3.RunLoop 即將觸發(fā) Source0 (非port) 回調(diào)。__CFRunLoopDoObservers(runloop, currentMode, kCFRunLoopBeforeSources);// 4.RunLoop 觸發(fā) Source0 (非port) 回調(diào)。sourceHandledThisLoop = __CFRunLoopDoSources0(runloop, currentMode, stopAfterHandle)// 5.執(zhí)行被加入的block__CFRunLoopDoBlocks(runloop, currentMode);// 6.RunLoop 的線程即將進(jìn)入休眠(sleep)。__CFRunLoopDoObservers(runloop, currentMode, kCFRunLoopBeforeWaiting);// 7.調(diào)用 mach_msg 等待接受 mach_port 的消息。線程將進(jìn)入休眠, 直到被下面某一個(gè)事件喚醒。__CFRunLoopServiceMachPort(waitSet, &msg, sizeof(msg_buffer), &livePort)// 進(jìn)入休眠// 8.RunLoop 的線程剛剛被喚醒了。__CFRunLoopDoObservers(runloop, currentMode, kCFRunLoopAfterWaiting// 9.如果一個(gè) Timer 到時(shí)間了,觸發(fā)這個(gè)Timer的回調(diào)__CFRunLoopDoTimers(runloop, currentMode, mach_absolute_time())// 10.如果有dispatch到main_queue的block,執(zhí)行bloc __CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__(msg);// 11.如果一個(gè) Source1 (基于port) 發(fā)出事件了,處理這個(gè)事件__CFRunLoopDoSource1(runloop, currentMode, source1, msg);// 12.RunLoop 即將退出__CFRunLoopDoObservers(rl, currentMode, kCFRunLoopExit);

我們可以看到RunLoop調(diào)用方法主要集中在kCFRunLoopBeforeSources和kCFRunLoopAfterWaiting之間,有人可能會(huì)問(wèn)kCFRunLoopAfterWaiting之后也有一些方法調(diào)用,為什么不監(jiān)測(cè)呢,我的理解,大部分導(dǎo)致卡頓的的方法是在kCFRunLoopBeforeSources和kCFRunLoopAfterWaiting之間,比如source0主要是處理App內(nèi)部事件,App自己負(fù)責(zé)管理(出發(fā)),如UIEvent(Touch事件等,GS發(fā)起到RunLoop運(yùn)行再到事件回調(diào)到UI)、CFSocketRef。開(kāi)辟一個(gè)子線程,然后實(shí)時(shí)計(jì)算 kCFRunLoopBeforeSources 和 kCFRunLoopAfterWaiting 兩個(gè)狀態(tài)區(qū)域之間的耗時(shí)是否超過(guò)某個(gè)閥值,來(lái)斷定主線程的卡頓情況。

這里做法又有點(diǎn)不同,iOS實(shí)時(shí)卡頓監(jiān)控3 是設(shè)置連續(xù)5次超時(shí)50ms認(rèn)為卡頓,戴銘在 GCDFetchFeed4 中設(shè)置的是連續(xù)3次超時(shí)80ms認(rèn)為卡頓的代碼。以下是iOS實(shí)時(shí)卡頓監(jiān)控中提供的代碼:

- (void)start{if (observer)return;// 信號(hào) semaphore = dispatch_semaphore_create(0);// 注冊(cè)RunLoop狀態(tài)觀察CFRunLoopObserverContext context = {0,(__bridge void*)self,NULL,NULL}; observer = CFRunLoopObserverCreate(kCFAllocatorDefault, kCFRunLoopAllActivities,YES,0, &runLoopObserverCallBack, &context);CFRunLoopAddObserver(CFRunLoopGetMain(), observer, kCFRunLoopCommonModes);// 在子線程監(jiān)控時(shí)長(zhǎng)dispatch_async(dispatch_get_global_queue(0, 0), ^{while (YES){long st = dispatch_semaphore_wait(semaphore, dispatch_time(DISPATCH_TIME_NOW, 50*NSEC_PER_MSEC));if (st != 0) {if (!observer){ timeoutCount = 0; semaphore = 0; activity = 0;return;}if (activity==kCFRunLoopBeforeSources || activity==kCFRunLoopAfterWaiting){if (++timeoutCount < 5)continue; PLCrashReporterConfig *config = [[PLCrashReporterConfig alloc] initWithSignalHandlerType:PLCrashReporterSignalHandlerTypeBSD symbolicationStrategy:PLCrashReporterSymbolicationStrategyAll]; PLCrashReporter *crashReporter = [[PLCrashReporter alloc] initWithConfiguration:config];NSData *data = [crashReporter generateLiveReport]; PLCrashReport *reporter = [[PLCrashReport alloc] initWithData:data error:NULL];NSString *report = [PLCrashReportTextFormatter stringValueForCrashReport:reporter withTextFormat:PLCrashReportTextFormatiOS];NSLog(@'------------n%@n------------', report);} } timeoutCount = 0;} });}子線程Ping

但是由于主線程的RunLoop在閑置時(shí)基本處于Before Waiting狀態(tài),這就導(dǎo)致了即便沒(méi)有發(fā)生任何卡頓,這種檢測(cè)方式也總能認(rèn)定主線程處在卡頓狀態(tài)。這套卡頓監(jiān)控方案大致思路為:創(chuàng)建一個(gè)子線程通過(guò)信號(hào)量去ping主線程,因?yàn)閜ing的時(shí)候主線程肯定是在kCFRunLoopBeforeSources和kCFRunLoopAfterWaiting之間。每次檢測(cè)時(shí)設(shè)置標(biāo)記位為YES,然后派發(fā)任務(wù)到主線程中將標(biāo)記位設(shè)置為NO。接著子線程沉睡超時(shí)闕值時(shí)長(zhǎng),判斷標(biāo)志位是否成功設(shè)置成NO,如果沒(méi)有說(shuō)明主線程發(fā)生了卡頓。ANREye5中就是使用子線程Ping的方式監(jiān)測(cè)卡頓的。

@interface PingThread : NSThread......@end@implementation PingThread- (void)main { [self pingMainThread];}- (void)pingMainThread {while (!self.cancelled) {@autoreleasepool {dispatch_async(dispatch_get_main_queue(), ^{[_lock unlock]; });CFAbsoluteTime pingTime = CFAbsoluteTimeGetCurrent();NSArray *callSymbols = [StackBacktrace backtraceMainThread]; [_lock lock];if (CFAbsoluteTimeGetCurrent() - pingTime >= _threshold) {...... } [NSThread sleepForTimeInterval: _interval];} }}@end

以下是我用Swift實(shí)現(xiàn)的:

public class CatonMonitor {enum Constants {static let timeOutInterval: TimeInterval = 0.05static let queueTitle = 'com.roy.PerformanceMonitor.CatonMonitor' }private var queue: DispatchQueue = DispatchQueue(label: Constants.queueTitle)private var isMonitoring = falseprivate var semaphore: DispatchSemaphore = DispatchSemaphore(value: 0)public init() {}public func start() {guard !isMonitoring else { return }isMonitoring = truequeue.async {while self.isMonitoring {var timeout = trueDispatchQueue.main.async { timeout = falseself.semaphore.signal()}Thread.sleep(forTimeInterval: Constants.timeOutInterval)if timeout {let symbols = RCBacktrace.callstack(.main)for symbol in symbols {print(symbol.description) }}self.semaphore.wait() }} }public func stop() {guard isMonitoring else { return }isMonitoring = false }}CPU超過(guò)了80%

這個(gè)是Matrix-iOS 卡頓監(jiān)控提到的:

我們也認(rèn)為 CPU 過(guò)高也可能導(dǎo)致應(yīng)用出現(xiàn)卡頓,所以在子線程檢查主線程狀態(tài)的同時(shí),如果檢測(cè)到 CPU 占用過(guò)高,會(huì)捕獲當(dāng)前的線程快照保存到文件中。目前微信應(yīng)用中認(rèn)為,單核 CPU 的占用超過(guò)了 80%,此時(shí)的 CPU 占用就過(guò)高了。

這種方式一般不能單獨(dú)拿來(lái)作為卡頓監(jiān)測(cè),但可以像微信Matrix一樣配合其他方式一起工作。

戴銘在GCDFetchFeed中如果CPU 的占用超過(guò)了 80%也捕獲函數(shù)調(diào)用棧,以下是代碼:

#define CPUMONITORRATE 80+ (void)updateCPU {thread_act_array_t threads;mach_msg_type_number_t threadCount = 0;const task_t thisTask = mach_task_self();kern_return_t kr = task_threads(thisTask, &threads, &threadCount);if (kr != KERN_SUCCESS) {return; }for (int i = 0; i < threadCount; i++) {thread_info_data_t threadInfo;thread_basic_info_t threadBaseInfo;mach_msg_type_number_t threadInfoCount = THREAD_INFO_MAX;if (thread_info((thread_act_t)threads[i], THREAD_BASIC_INFO, (thread_info_t)threadInfo, &threadInfoCount) == KERN_SUCCESS) { threadBaseInfo = (thread_basic_info_t)threadInfo;if (!(threadBaseInfo->flags & TH_FLAGS_IDLE)) {integer_t cpuUsage = threadBaseInfo->cpu_usage / 10;if (cpuUsage > CPUMONITORRATE) {//cup 消耗大于設(shè)置值時(shí)打印和記錄堆棧 NSString *reStr = smStackOfThread(threads[i]); SMCallStackModel *model = [[SMCallStackModel alloc] init]; model.stackStr = reStr;//記錄數(shù)據(jù)庫(kù)中 [[[SMLagDB shareInstance] increaseWithStackModel:model] subscribeNext:^(id x) {}];// NSLog(@'CPU useage overload thread stack:n%@',reStr);} }} }}卡頓方法的棧信息

當(dāng)我們得到卡頓的時(shí)間點(diǎn),就要立即拿到卡頓的堆棧,有兩種方式一種是遍歷棧幀,實(shí)現(xiàn)原理我在iOS獲取任意線程調(diào)用棧7寫(xiě)的挺詳細(xì)的,同時(shí)開(kāi)源了代碼RCBacktrace,另一種方式是通過(guò)Signal獲取任意線程調(diào)用棧,實(shí)現(xiàn)原理我在通過(guò)Signal handling(信號(hào)處理)獲取任意線程調(diào)用棧寫(xiě)了,代碼在backtrace-swift,但這種方式在調(diào)試時(shí)比較麻煩,建議用第一種方式。

以上就是IOS中判斷卡頓的方案總結(jié)的詳細(xì)內(nèi)容,更多關(guān)于IOS卡頓檢測(cè)的資料請(qǐng)關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: IOS
相關(guān)文章:
主站蜘蛛池模板: 国产精品999 | 欧美精品一区二区三区四区在线 | 黄色片在线免费观看 | 中文字幕亚洲欧美日韩在线不卡 | 日韩高清在线一区 | 成人精品久久久 | 国产精品毛片无码 | 91在线精品秘密一区二区 | 亚洲精品一区二区三区不 | 欧美 日本 国产 | 伊人久久精品久久亚洲一区 | 日韩欧美在线播放视频 | 日韩成人在线观看 | 天天操狠狠操网站 | 欧美综合在线观看 | 视频成人免费 | 国产精品久久久久久福利一牛影视 | www日本高清 | 国产一区二区视频在线观看 | 国产成人高清 | 91夜夜夜| 天天曰夜夜操 | 综合久久一区 | 日本一区二区三区四区视频 | 99精品欧美一区二区三区 | 亚洲成av人片在线观看无码 | 成人免费小视频 | 欧美精品欧美精品系列 | 国产日韩精品一区二区 | 久久久二 | 免费一区二区 | 欧美另类专区 | 日韩一区二区三区在线观看 | 日韩另类 | 欧美一级淫片免费看 | 国产在线中文字幕 | 日韩精品一区二区三区四区五区 | 99视频这里有精品 | 国产精品久久久久久福利一牛影视 | 国产精品久久久久久久久久妞妞 | 天堂资源av | 亚洲一区日韩 | 亚洲精品一区二区另类图片 | 中文字幕 视频一区 | 欧美一区二区在线视频 | 国产精品久久久久久久久久东京 | 亚洲精品自拍视频 | 国产精品二区一区 | 天天看天天操 | 欧美一区二区久久久 | 欧美日韩中文在线 | 色天天综合网 | 九九热在线视频 | 欧美极品一区二区三区 | 久久高清| 日韩精品影院 | bxbx成人精品一区二区三区 | 精品一区二区三区国产 | 国产亚洲精品美女久久久久久久久久 | 亚洲乱码国产乱码精品精 | 欧美激情一区二区三区蜜桃视频 | 一区二区三区国产视频 | 国产精品女同一区二区久久夜 | 欧美一级二级视频 | av在线视 | 成人免费网站www网站高清 | 日韩一区二区在线播放 | 中文字幕日韩欧美 | 久久成人18免费网站 | 亚洲精品成人网 | 日韩精品一区二区三区四区五区 | 午夜精品一区二区三区免费视频 | 99在线视频精品 | 久久久精品视频免费观看 | 久久午夜综合久久 | 亚洲日韩aⅴ在线视频 | 亚洲精品一区二区另类图片 | av国产精品毛片一区二区小说 | 久久叉| 亚洲一区视频在线 | 国产猛男猛女超爽免费视频网站 | 日本成人黄色网址 | 国产精品久久精品久久 | 国产精品精品久久久 | av中文字幕在线播放 | 亚洲精品久久 | 日韩在线观看第一页 | 一级黄色片网站 | jizz久久久| 成人片网址 | 国产成人免费视频 | 欧美日韩第一页 | aaaaaa黄色片 | 亚洲一区在线日韩在线深爱 | 一级毛片大全免费播放 | 51ⅴ精品国产91久久久久久 | 性高湖久久久久久久久aaaaa | 亚洲欧美国产精品久久 | 在线视频一区二区三区 | 亚洲日本va中文字幕 | 国产视频9999 | 日韩精品一区二区在线观看 | 国产日韩精品一区二区 | 国产中文字幕在线观看 | 国产精品美女久久久久久久久久久 | 97av| 精品国产乱码久久久久久久软件 | 久久99精品国产麻豆婷婷洗澡 | 精品网站999www | 亚洲第一区在线 | 亚洲综合区 | 嫩草影院在线观看91麻豆 | 偷拍自拍网站 | 六月综合激情 | 国产福利91精品 | 日韩三级电影在线免费观看 | 一级黄色片aaa | 国产一区二区久久 | 成人老司机 | 国产亚州av| av在线免费播放 | 亚洲免费网站 | 亚洲日本欧美日韩高观看 | 欧美黄色片免费观看 | 91精品国产综合久久久久 | 国产不卡视频在线观看 | 99精品欧美一区二区蜜桃免费 | 在线观看免费成人av | 一级欧美片 | 一区不卡 | 暖暖av | 亚洲 欧美 在线 一区 | 成人羞羞在线观看网站 | 免费看国产一级片 | 综合亚洲精品 | 欧美日韩最新 | 久久久久国产一区二区三区四区 | 青草福利| 精品无码久久久久久国产 | 日本久久久一区二区三区 | 九九免费在线观看 | 真人女人一级毛片免费播放 | 日韩精品一区二区三区第95 | 啊啊啊网站 | av片免费看| 欧美久久久久久久久久久久久久 | 午夜精品久久久久久久久 | 欧美一区二区三区 | 99影视| 成人av影院 | 成年片 | 99热国产精品 | 男人天堂网av| 国产传媒一区 | 久久亚洲一区 | 久久精品国产一区二区电影 | 99视频在线播放 | 在线播放中文字幕 | 亚洲国产精品久久久男人的天堂 | 国产片久久 | 欧美一级大片免费 | 色综合一区二区三区 | 成人精品在线视频 | 久久r免费视频 | 中文字幕日本视频 | 日韩6699人妻熟女毛片 | 九九久久久 | 国产精品久久免费观看spa | 一级全毛片 | 日韩视频在线一区二区 | 国内精品一级毛片国产99 | 久久久精品免费观看 | 国产精品999 | 亚洲国产午夜视频 | 国产不卡免费视频 | 欧美日韩精品在线一区 | 国产免费av网站 | 国产精品爱久久久久久久 | 国产精品99久久 | 日韩成人在线观看视频 | 欧美成人精品激情在线观看 | 6080yy精品一区二区三区 | 最新国产在线视频 | 亚洲国产1区 | 国产一区二区三区四区五区加勒比 | 免费一级片 | 日韩精品1区2区 | 少妇久久久久 | 欧美日韩国产精品 | 国产在亚洲 线视频播放 | 欧美日韩三级在线 | 玖玖精品 | 日韩精品影院 | 99国产精品视频免费观看一公开 | av影院在线观看 | 国产二区视频 | 精品欧美一区二区三区久久久 | 先锋资源久久 | 中文字幕在线资源 | 自拍偷拍第一页 | 日韩视频免费在线观看 | 91小视频| 日韩在线中文字幕 | 亚洲国产二区三区 | 精品九九 | 久久精品免费看 | 日本一区二区三区免费观看 | 91社区在线高清 | 国产精品久久久久久亚洲调教 | 亚洲国产成人精品女人 | 亚洲欧美91 | 精品在线播放 | 久久精品高清 | 欧美日韩在线成人 | 亚洲精品在线视频 | 中文字幕免费在线 | 免费三级电影网站 | 久久久久一区 | 国产精品美女久久久久久久久久久 | 中文字幕日韩专区 | 亚洲经典视频在线观看 | 久久精品欧美电影 | 黄色直接看 | 日韩av一区二区三区在线观看 | 日韩在线免费观看av | 亚洲毛片| www.国产.com | 久久黄网| 久久久久成人精品 | 国产激情毛片 | a成人| 91中文在线观看 | 超碰在线播 | 欧美激情一区二区 | 国产精品久久久久一区二区三区 | 中文字幕综合在线 | 欧美在线 | 亚洲 | 日韩欧美一区二区三区免费观看 | 亚洲国产精品久久久久 | 高清国产一区二区三区 | 欧美精品网站 | 91精品久久| 欧美成年黄网站色视频 | 最近的中文字幕在线看视频 | 操网| 久久国产精品系列 | 在线只有精品 | 久久久久中文字幕 | 日韩av高清| 国产高清视频在线观看 | 精品欧美久久 | 亚洲福利在线观看 | 一级毛片,一级毛片 | 欧美精品在欧美一区二区少妇 | 成人不卡| 成人精品视频一区二区三区 | 午夜社区 | 中文字幕视频在线免费观看 | 在线一区 | 性视频一区 | 国产a区 | 国产精品手机在线 | 久久天天躁狠狠躁夜夜躁2014 | 亚洲一区二区三区高清 | 免费一区 | 日韩一级片 | 国产精品久久久精品 | www.av在线| 在线日韩视频 | 中文在线一区 | 这里有精品视频 | 日韩中文字幕免费在线播放 | 国产日韩欧美一区二区在线观看 | 欧美精品国产精品 | 九九九色 | 99精品视频在线观看 | 国产精品女同一区二区久久夜 | 午夜影院普通用户体验区 | 婷婷五月色综合香五月 | 国产精品久久久久久久浪潮网站 | 一区二区三区国产好 | 亚洲1级片| www.44181com | 毛片网站免费在线观看 | 在线免费观看黄色 | 毛片一级| 久久天天躁狠狠躁夜夜躁2014 | 国产一区久久 | 成人免费淫片aa视频免费 | 国产成人精品一区二区三区视频 | 中文字幕av一区 | 欧美一区二区在线免费观看 | 亚洲天堂一区二区 | 99这里只有精品视频 | av网站观看| 欧美日韩国产影院 | 免费一级黄色电影 | 成年免费视频 | 啊v在线| 色橹橹欧美在线观看视频高清 | 亚洲欧美日韩系列 | 中文字幕91| 国产高清精品在线 | 国产成人在线免费观看视频 | 美女视频一区 | 黄视频在线播放 | 午夜噜噜噜| 日韩视频在线观看 | 中文字幕在线免费 | 欧美久久久久久久久久伊人 | 在线视频中文字幕 | 一区二区三区国产 | 亚洲精品国产片 | 精品中文字幕在线观看 | 亚洲国产成人精品女人久久久 | 免费黄色在线 | 久久亚洲天堂 | 欧美精品在线观看免费 | 最新天堂中文在线 | 欧美精品日韩 | 精品久久网 | 黄免费观看 | 曰曰操| 日韩福利片 | 毛片a在线| 每日更新av| 国产精品99一区二区三区 | 99久久夜色精品国产网站 | 亚洲国产成人91精品 | 久久99精品视频在线观看 | 欧美日韩一区二区三区在线观看 | 99精品久久 | 爱爱精品 | 97成人在线视频 | 亚洲第1页| 国产美女精品人人做人人爽 | 日本视频二区 | 亚洲综合区 | 一区二区三区影院 | 九九综合九九综合 | 国产精品1区2区3区 午夜视频网站 | 91久久久久久久久久久久久久久久 | 日韩精品一区二区三区老鸭窝 | 欧美综合久久 | 午夜精品偷拍 | 免费av一区二区三区 | 成人免费在线电影 | 亚洲成人av电影 | av成人在线观看 | 久久精品欧美一区二区三区不卡 | 久久99热精品免费观看牛牛 | 福利片在线观看 | 99国产精品久久久久久久 | 日韩精品一区二区在线观看 | 欧美激情 在线 | 国产视频第一页 | sese综合| 91精品国产综合久久国产大片 | 欧美高潮| 欧美性网 | 久久免费精品视频 | 国产精品一区二区三区在线播放 | 日本午夜在线 | 亚洲精品日韩激情欧美 | 国产精品第一国产精品 | 精品一区视频 | 国产精选一区二区三区不卡催乳 | 在线看av的网址 | 亚洲一区视频在线 | 亚洲视频久久久 | www.久久99| 亚洲精品一区二区 | 亚洲欧美激情在线 | 色视频网站在线观看一=区 日韩一二三区 | 欧美精产国品一二三区 | 91久久精品一区二区三区 | 99色影院 | 久久午夜影院 | 日韩一区二区三区在线 | 欧美视频免费在线 | a毛片毛片av永久免费 | 久草视频在线播放 | 欧美在线视频网 | 一级毛片大全免费播放 | 日韩手机在线 | 成人久久 | 国产精品一卡二卡 | 成人精品国产免费网站 | 久久网页 | 色婷婷综合久久久久中文一区二区 | 8x国产精品视频一区二区 | 欧美国产综合一区 | 国产综合精品视频 | 成人亚洲视频 | 精品国产乱码一区二区三区四区 | 亚洲成人av在线 | 国产黄色免费视频 | 日韩三级在线免费 | 国产精品久久久久久亚洲调教 | 人人射人人插 | 91国内精品久久 | 国产精品久久久久久久久久大牛 | 欧美一区二区视频 | 91在线精品一区二区三区 | 亚洲 中文 欧美 日韩 在线观看 | 99精品一区二区三区 | 福利片一区二区 | 天天射天天干 | 天天拍天天操 | 精品在线一区二区 | 国产免费黄色 | 一区二区免费在线播放 | 亚洲欧美第一页 | 欧美一区二区在线播放 | 国产91久久精品一区二区 | 久久综合一区二区三区 | 精品无人乱码一区二区三区 | 国产精品入口麻豆www | 欧美一区二区三 | 色欧美片视频在线观看 | 91精品久久久久久久久久久 | 五月天中文字幕 | 日韩精品一区二区三区中文在线 | 一区免费看 | 欧美日本韩国一区二区三区 | 欧美日韩国产一区二区在线观看 | 91精品国产99久久久久久红楼 | 日本黄色大片免费 | 精品亚洲一区二区三区 | 一区二区三区在线播放视频 | 日本免费三片免费观看 | www.99re| 亚洲精品二三区 | 在线观看国产小视频 | 欧美国产在线观看 | 欧美综合在线观看 | 男女视频免费 | 国产精品夜夜春夜夜爽久久电影 | 午夜私人影院 | 大乳videos巨大吃奶 | 国产精品视频不卡 | 99爱国产 | 中文字幕日韩一区二区不卡 | 97人人爱 | 午夜激情福利视频 | 亚洲视频三区 | 国产精品一区二区久久久 | 欧美精品欧美精品系列 | 日本三级不卡 | 精品一区二区三区视频 | 中文字幕91 | 欧美色性 | 在线色网| 日韩在线精品视频 | 青春草在线观看 | 在线看片日韩 | 国产成人av在线播放 | 一区二区日韩 | 九九精品久久久 | 九九热欧美 | 日本一二三区视频 | 亚洲日本韩国欧美 | avhd101在线成人播放 | 久草在线免费福利资源 | 欧美人牲 | 国产成人午夜视频 | 81精品国产乱码久久久久久 | 91免费版在线看 | 一级大片免费观看 | 国产精品久久久久久久久 | 久久久精品一区 | 一区二区在线电影 | 婷婷在线观看视频 | 日韩欧美一区二区在线观看视频 | 日韩视频在线免费观看 | 午夜草民福利电影 | 亚洲乱码国产乱码精品精98午夜 | 亚洲电影免费 | 91精品久久久久久久 | 亚洲国产字幕 | 特黄特黄a级毛片免费专区 av网站免费在线观看 | 色花av| 欧美另类亚洲 | 一区二区三区日韩 | 国产高清在线精品一区二区三区 | 中国特级毛片 | 山岸逢花在线观看无删减 | 亚洲一区中文字幕在线观看 | 在线看片日韩 | 久久美女视频 | 天天插天天操天天干 | 免费看h| 久草免费在线视频 | 欧美一区二区三区电影 | 黄a在线| 午夜激情电影在线 | 久在线视频播放免费视频 | 久久久日本 | 亚洲九九 | 在线观看一区二区三区四区 | 成人欧美 | 国产精品色哟哟哟 | 国产精品久久久久一区二区三区 | 欧美日韩在线播放 | 久久不色| 久久av黄色 | 亚洲日韩中文字幕一区 | 超碰在线天天 | 91精品国产91久久久久久最新 | 欧美日韩精品一区二区 | 九九精品免费视频 | 久久成人综合 | 欧美九九九 | 亚洲日本va中文字幕 | av一区二区三区四区 | 求av网址| 色呦呦网站在线观看 | 欧美一区二区三区黄 | 国产日韩高清在线 | 国产成人精品久久二区二区 | 亚洲日本午夜 | 亚洲视频一区 | xxxx欧美| 一级毛片免费看 | 91精品国产乱码久久久久久 | 国产一级免费视频 | 伊人久麻豆社区 | 亚洲精品www久久久久久广东 | 精品美女在线观看视频在线观看 | 亚洲小视频 | 国产伦精品一区二区三区四区视频 | 99精品视频免费 | 欧美日韩在线一区二区三区 | 毛片网络 | 亚洲三区在线观看 | 日韩在线中文字幕 | 91精品国产色综合久久不卡98口 | 精品久久久久久久久久久久久久久 | 午夜影院黄色 | 午夜国产精品成人 | 成人在线免费观看视频 | 二区三区在线 | 亚洲成人日韩 | 亚洲一区二区在线电影 | 久久免费精品 | 男人的天堂视频网站 | 亚洲精品一区二区三区中文字幕 | 中文字幕自拍偷拍 | 国产精品无码久久久久 | 久久久久国产一区二区三区 | 天天干人人 | 欧美一区二区三区在线 | 午夜精品久久久久久久白皮肤 | 免费午夜视频 | 国产精品一区二区三区在线免费观看 | 欧美视频一级 | 日韩在线大片 | 日韩中文字幕视频 | 亚洲大片免费观看 | 国产一区二区高潮 | 四虎影视网址 | 超碰999 | 久久久久久影院 | 日韩在线视频一区 | 在线看www| 日韩精品一区二区三区在线 | 久久中文字幕一区 | 久久在线播放 | av一级毛片 | 不卡免费在线视频 | 在线不卡a资源高清 | 精品香蕉一区二区三区 | 国产电影一区二区 | 欧美视频三区 | 欧美亚洲国产一区二区三区 | 精品一区二区电影 | 午夜视频在线观看免费视频 | 91资源在线 | 久久久久久香蕉 | 亚洲欧美一区二区三区在线 | 天堂中文在线视频 | 一区二区三区在线观看视频 | 久久亚洲黄色 | 黄色天堂在线观看 | 午夜亚洲 | 美女张开腿视频网站免费 | 成人午夜电影在线观看 | 一区二区久久 | 视频一区二区中文字幕 | 亚洲精品中文字幕中文字幕 | 中文字幕一区二区三区四区 | 黑色丝袜脚足j国产在线看68 | 九色porny丨国产精品 | 国产精品伦一区二区三级视频 | 日韩久久一区二区 | 久久人人爽人人爽人人片亚洲 | 欧美亚洲视频在线观看 | 青青草久久网 | 狠狠干av | 午夜精品一区 | 欧美高清一区 | 美女久久久久 | 99精品全国免费观看视频软件 | 国产视频观看 | 国产精品久久久久久久久大全 | 国产美女av在线 | 天堂中文资源在线 | 午夜影院免费 | 国产免费av一区二区三区 | 国产 欧美 日韩 一区 | 亚洲欧美日韩在线一区二区三区 | 在线欧美日韩 | 日本精品久久久一区二区三区 | 狠狠操狠狠操 | 色5月婷婷丁香六月 |